Pagini recente » Cod sursa (job #1433140) | Cod sursa (job #2665392) | Cod sursa (job #2668137) | Cod sursa (job #3228026) | Cod sursa (job #3203529)
#include <iostream>
#define MAXN 100001
#define MAXK 1000001
#define MIN(a, b) ((a)>(b)?(b):(a))
using namespace std;
int st[MAXN][30];
int lg[MAXK];
int n, q;
int main(){
for(int i=2; i<=MAXK; i++){
lg[i] = 1 + lg[i/2];
}
FILE *fin, *fout;
fin = fopen("rmq.in", "r");
fscanf(fin, "%d%d", &n, &q);
for(int i=0; i<n; i++){
fscanf(fin, "%d", &st[0][i]);
}
for(int i=1; (1<<i)<n; i++){
for(int j=0; j+(1<<(i-1))<n; j++){
st[i][j] = MIN( st[i-1][j], st[i-1][j+(1<<(i-1))] );
}
}
fout = fopen("rmq.out", "w");
while(q>0){
int i, j; fscanf(fin, "%d%d", &i, &j);
int len = j-i+1;
int k = lg[len];
int m = MIN(st[k][i], st[k][j-(1<<k)]);
fprintf(fout, "%d\n", m);
q--;
}
fclose(fin);
fclose(fout);
return 0;
}