-LIR-

Secventa2 infoarena

Aug 2nd, 2018
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.54 KB | None | 0 0
  1. #include <fstream>
  2.  
  3. using namespace std;
  4.  
  5. int main()
  6. {
  7.     // sums[i] = suma elementelor v[0], v[1], v[2], ... v[i]
  8.     // suma elementelor v[i], v[i+1], v[i+2], ... v[j] = sums[j] - sums[i-1]
  9.     // min_sums[i] = pozitia minimul elementelor sums[0], sums[1], sums[2], ... sums[i]
  10.     // sums[min_sums[i]] = minimul elementelor sums[0], sums[1], sums[2], ... sums[i]
  11.     // Folosind min_sums vom puteam gasi secventa de suma maxima care se termina pe pozitia i
  12.     // de orice lungime. Suma secventei este sums[i] - sums[min_sums[i-lungime-1]],
  13.     // incepe la min_sums[i-lungime-1]+1 si se termina la i.
  14.  
  15.     ifstream fin("secv2.in");
  16.     ofstream fout("secv2.out");
  17.  
  18.     long long vector_length, length_min, number, sums[50001], min_sums[50001];
  19.  
  20.     fin >> vector_length >> length_min;
  21.  
  22.     sums[0] = 0;
  23.     min_sums[0] = 0;
  24.     for( int i=1 ; i<=vector_length ; i++ )
  25.     {
  26.         fin >> number;
  27.         sums[i] = sums[i-1] + number;
  28.         if( sums[i] > sums[min_sums[i-1]] )
  29.             min_sums[i] = min_sums[i-1];
  30.         else
  31.             min_sums[i] = i;
  32.     }
  33.  
  34.     long long left, right, value = -999999999999; // best programmer ever
  35.     for( int i=length_min ; i<=vector_length ; i++ )
  36.     {
  37.         if( value < sums[i] - sums[min_sums[i-length_min-1]] )
  38.         {
  39.             value = sums[i] - sums[min_sums[i-length_min-1]];
  40.             left = min_sums[i-length_min-1]+1;
  41.             right = i;
  42.         }
  43.     }
  44.  
  45.     fout << left << " " << right << " " << value;
  46.  
  47.     fin.close();
  48.     fout.close();
  49.     return 0;
  50. }
Add Comment
Please, Sign In to add comment