Advertisement
Malinovsky239

sqrt-decomposition

Dec 26th, 2011
827
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.78 KB | None | 0 0
  1. #include <cstdio>
  2. #include <iostream>
  3. #include <algorithm>
  4.  
  5. #define N int(3e4)
  6.  
  7. using namespace std;
  8.  
  9. int act[N], len, sz, res[N];
  10.  
  11. int answer(int l, int r) {
  12.     int ret = -1, i;
  13.     for (i = l; i % sz && i <= r; i++)
  14.         ret = max(ret, act[i]);
  15.     for (; i + sz <= r + 1; i += sz)
  16.         ret = max(ret, res[i / sz]);
  17.     for (; i <= r; i++)
  18.         ret = max(ret, act[i]);
  19.     return ret;                    
  20. }
  21.  
  22. int main() {
  23.     int i, m;
  24.     cin >> m;
  25.     for (i = 0; ; i++) {
  26.         cin >> act[i];
  27.         if (act[i] == -1)
  28.             break;
  29.     }
  30.     len = i;
  31.  
  32.     for (sz = 1; sz * sz < len; sz++);
  33.    
  34.     for (int j = i + 1; j < sz * sz; j++)
  35.         act[j] = -1;
  36.  
  37.     for (int i = 0; i < sz * sz; i++)
  38.         res[i / sz] = max(res[i / sz], act[i]);
  39.    
  40.     for (int i = 0; i + m <= len; i++)
  41.         cout << answer(i, i + m - 1) << endl;      
  42.  
  43.     return 0;
  44. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement