Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- ifstream fin("rmq.in");
- ofstream fout("rmq.out");
- const short PMAX=17;
- int RMQ[PMAX][1<<PMAX],a[1<<PMAX],put[1<<PMAX],n,query;
- int main()
- {
- fin>>n>>query;
- for(int i=1;i<=n;i++)
- fin>>a[i];
- put[1]=0;
- for(int i=2;i<=n;i++)
- put[i]=put[i/2]+1;
- for(int i=1;i<=n;i++)
- RMQ[0][i]=a[i];
- for(int i=1;(1<<i)<=n;i++)
- for(int j=(1<<i);j<=n;j++)
- {
- int k=(1<<(i-1));
- RMQ[i][j]=min(RMQ[i-1][j],RMQ[i-1][j-k]);
- }
- while(query--)
- {
- int x,y,lug,k;
- fin>>x>>y;
- lug=(y-x+1);
- k=put[lug];
- fout<<min(RMQ[k][x+(1<<k)-1],RMQ[k][y])<<"\n";
- }
- fin.close();
- fout.close();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement