Alex_tz307

RMQ logic

Sep 12th, 2020
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.71 KB | None | 0 0
  1. #include<fstream>
  2. #include<algorithm>
  3. using namespace std;
  4. ifstream f("rmq.in");
  5. ofstream g("rmq.out");
  6. int n,rmq[20][100002],p[20],e[100002];
  7.  
  8. void calc()
  9. {
  10.     int i,x=2,k=1;
  11.     while(x<=n)
  12.     {
  13.         for(i=1;i<=n-x+1;i++)
  14.             rmq[k][i]=min(rmq[k-1][i],rmq[k-1][i+x/2]);
  15.         x*=2;
  16.         k++;
  17.     }
  18. }
  19.  
  20. int main()
  21. {
  22.     int m,i,x=1,k=0,y,z;
  23.     f>>n>>m;
  24.     for(i=1;i<=n;i++)
  25.         f>>rmq[0][i];
  26.     for(i=1;i<=n;i++)
  27.     {
  28.         if(x*2==i)
  29.             x*=2,k++;
  30.         e[i]=k;
  31.         p[k]=x;
  32.     }
  33.     calc();
  34.     for(i=1;i<=m;i++)
  35.     {
  36.         f>>x>>y;
  37.         k=e[y-x+1];
  38.         z=p[k];
  39.         g<<min(rmq[k][x],rmq[k][y-z+1])<<'\n';
  40.     }
  41.     return 0;
  42. }
Add Comment
Please, Sign In to add comment