fork download
  1. #include <bits/stdc++.h>
  2. using namespace std ;
  3.  
  4.  
  5. #define ll long long
  6. #define fast ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
  7. #define fir first
  8. #define sec second
  9. #define piint pair < int , int >
  10. #define FOR( i , a , b ) for (int i = (a) , _b = (b) ; i <= _b ; i ++ )
  11. #define pb push_back
  12. #define str string
  13. #define ALL(a) (a).begin() , (a).end()
  14. #define rep( i , a , b) for (int i = (a) ; i < (b) ; i ++ )
  15. #define ld long double
  16. const int maxn = 1e5;
  17. #define debug 0
  18. #define oo (ll)(1e18)
  19.  
  20. ll a[maxn+3] , g[maxn+3] ;
  21.  
  22. int n ;
  23. void sub1() {
  24. ll ans = -1e18 ;
  25. FOR ( i , 1 , n )
  26. g[i] = g[i - 1 ] + a[i] ;
  27. FOR ( i , 1 , n ) {
  28. ll x1 , x2 , x3 ;
  29. ll val_1 = -1e18 , val_2 = -1e18 ;
  30. FOR ( j , 1 , i )
  31. {
  32. ll val_of = g[j-1] - ( g[i-1] - g[j-1] ) ;
  33. if ( val_of > val_1) {
  34. val_1 = val_of ;
  35. x1 = j ;
  36. }
  37. }
  38. x2 = i ;
  39. FOR ( j , i , n + 1 ) {
  40. ll val_of = g[j - 1] - g[i-1] - ( g[n] - g[j-1]) ;
  41. if ( val_of > val_2){
  42. val_2 = val_of ;
  43. x3 = j ;
  44.  
  45. }
  46. }
  47. ans = max ( ans , val_1 + val_2 );
  48. }
  49. cout << ans ;
  50. }
  51. ll s[maxn*4 + 3 ] ;
  52. void build ( int id , int l , int r) {
  53. if ( l ==r ){
  54. s[id] = g[l-1] ;
  55. return ;
  56. }
  57. int m = ( l + r ) >> 1;
  58. build ( id * 2 , l , m ) ;
  59. build ( id * 2 + 1, m + 1 , r ) ;
  60. s[id] = max ( s[id * 2 ] , s[id * 2 + 1] ) ;
  61. }
  62. ll get ( int id , int l , int r , int u , int v ){
  63.  
  64. if ( l > v || r < u ) return -1e18 ;
  65. if ( u <= l && r <= v ){
  66. return s[id] ;
  67. }
  68. int m = ( l + r) >> 1 ;
  69. return max ( get ( id * 2 , l , m , u , v ) , get ( id * 2 + 1 , m + 1 , r , u , v )) ;
  70. }
  71. void sub2() {
  72. FOR ( i , 1 , n )
  73. g[i] = g[i - 1 ] + a[i] ;
  74. build ( 1 , 1 , n + 1 ) ;
  75. ll ans_1 = -1e18 ;
  76. FOR ( i , 1 , n ){
  77. ll val = 2ll * get ( 1 , 1 , n + 1, 1 , i ) - 2ll * g[i-1] + 2ll * get ( 1 , 1 , n + 1, i , n + 1 ) - g[n] ;
  78. ans_1 = max ( ans_1 , val ) ;
  79. }
  80. cout << ans_1 << '\n';
  81. }
  82. void input(){
  83.  
  84. cin >> n ;
  85. FOR ( i , 1 , n ) cin >> a[i] ;
  86. if ( n < 4 ) return ;
  87. else if (n <= 5000 ) sub1() ;
  88. else sub2() ;
  89. }
  90. #define name "ditich"
  91. int main(){
  92. fast
  93. if(fopen(name".INP","r")) {
  94. freopen (name".INP","r",stdin);
  95. freopen (name".OUT","w",stdout);
  96. }
  97. input() ;
  98. cerr << "\nTIME: = " << (1.0*clock())/CLOCKS_PER_SEC << '\n';
  99. return(0) ;
  100. }
Success #stdin #stdout #stderr 0s 5284KB
stdin
Standard input is empty
stdout
Standard output is empty
stderr
TIME: = 0.004531