Advertisement
Jasir

MO s algorithm

May 20th, 2018
163
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.79 KB | None | 0 0
  1. int block;
  2.  
  3. struct Query{
  4.     int L, R, idx;
  5. } q[mx];
  6.  
  7. bool compare(Query x, Query y){
  8.     if (x.L/block != y.L/block)
  9.         return x.L/block < y.L/block;
  10.     return x.R < y.R;
  11. }
  12.  
  13. void queryResults(int n, int m){
  14.     block = (int)sqrt(n);
  15.  
  16.     sort(q, q + m, compare);
  17.     int currL = 0, currR = 0;
  18.     int currSum = 0;
  19.     for (int i=0; i<m; i++){
  20.         int L = q[i].L, R = q[i].R;
  21.         while (currL < L){
  22.             currSum -= a[currL];
  23.             currL++;
  24.         }
  25.         while (currL > L){
  26.             currSum += a[currL-1];
  27.             currL--;
  28.         }
  29.         while (currR <= R){
  30.             currSum += a[currR];
  31.             currR++;
  32.         }
  33.         while (currR > R+1){
  34.             currSum -= a[currR-1];
  35.             currR--;
  36.         }
  37.     }
  38. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement