Pagini recente » Cod sursa (job #516133) | Cod sursa (job #1758584) | Cod sursa (job #2340555) | Cod sursa (job #198445) | Cod sursa (job #2294806)
#include <iostream>
#include <stdio.h>
using namespace std;
int log[100001];
int pow2[18];
int main() {
FILE *fin, *fout;
int n, i, j, logn, p2, nrquerry, it, x, y, d, rmq;
int lookup_table[18][100001];
fin = fopen("st.in", "r");
fout = fopen("st.out", "w");
fscanf(fin,"%d%d", &n, &nrquerry);
for(i=1;i<=n;i++){
fscanf(fin,"%d", &lookup_table[0][i]);
}
pow2[0]=1;
for(i=1;i<=18;i++){
pow2[i]=pow2[i-1]*2;
}
p2=1;
log[1]=0;
for(i=2;i<=n+1;i++){
if(i==2*p2){
p2*=2;
log[i]=log[i-1]+1;
}
else
log[i]=log[i-1];
}
i=1;
logn=0;
while(i<n){
if(i*2<=n){
i*=2;
logn++;
}
else
i*=2;
}
for(i=1;i<=logn;i++){
for(j=1;j+(1<<i)-1<=n;j++){
if(lookup_table[i-1][j]<lookup_table[i-1][j+(1<<i-1)])
lookup_table[i][j]=lookup_table[i-1][j];
else
lookup_table[i][j]=lookup_table[i-1][j+(1<<i-1)];
}
}
for(it=1;it<=nrquerry;it++){
fscanf(fin,"%d%d", &x, &y);
d=y-x+1;
rmq=min(lookup_table[log[d-1]][x], lookup_table[log[d-1]][y-(1<<log[d])+1]);
fprintf(fout,"%d\n", rmq);
}
fclose(fin);
fclose(fout);
return 0;
}