Pagini recente » Cod sursa (job #2263331) | Cod sursa (job #2800476) | Cod sursa (job #59424) | Cod sursa (job #2219934) | Cod sursa (job #2280270)
#include<bits/stdc++.h>
using namespace std;
#define MAXN 100001
#define MAXP 20
int d[MAXN][MAXP];
int v[MAXN];
int n, m;
int lg[MAXN];
int minim(int a, int b){
if(a<b)
return a;
return b;
}
void rmq(){
int p, i;
printf("%d\n", n);
for(p=1; (1<<p)<n; p++){
for(i=1; i-1+(1<<p)<=n; i++)
d[i][p]=minim(d[i][p-1], d[i+(1<<p-1)][p-1]);
}
}
int main(){
FILE*fin=fopen("rmq.in", "r");
FILE*fout=fopen("rmq.out", "w");
int i, p, j, ans;
fscanf(fin, "%d%d", &n, &m);
for(i=1; i<=n; i++)
fscanf(fin, "%d", &v[i]);
for(i=1; i<=n; i++)
d[i][0]=v[i];
rmq();
lg[1]=0;
for(i=2; i<=n; i++)
lg[i]=lg[i/2]+1;
for(m; m>0; m--){
fscanf(fin, "%d%d", &i, &j);
ans=minim(d[i][lg[j-i]], d[j-(1<<lg[j-i])+1][lg[j-i]]);
fprintf(fout, "%d\n", ans);
}
// for(p=0; (1<<p)<n; p++){
// for(i=1; i<=n; i++)
// printf("%d ", d[i][p]);
// printf("\n");
// }
return 0;
}