Cod sursa(job #1615366)
| Utilizator | Data | 26 februarie 2016 15:22:00 | |
|---|---|---|---|
| Problema | Range minimum query | Scor | 100 |
| Compilator | cpp | Status | done |
| Runda | Arhiva educationala | Marime | 0.52 kb |
#include<fstream>
using namespace std;
ifstream in("rmq.in");
ofstream out("rmq.out");
const int Nmax = 100001;
int N,M,lg[Nmax],r[17][Nmax];
int main(){
for(int i=2;i<Nmax;i++) lg[i]=lg[i>>1]+1;
in>>N>>M;
for(int i=1;i<=N;i++) in>>r[0][i];
for(int e=1;e<=lg[N];e++) for(int i=1;i+(1<<e)<=N+1;i++) r[e][i]=min(r[e-1][i],r[e-1][i+(1<<(e-1))]);
for(int i=1;i<=M;i++){
int x,y; in>>x>>y;
int l=y-x+1;
out<<min(r[lg[l]][x],r[lg[l]][y-(1<<lg[l])+1])<<'\n';
}
return 0;
}
