Pagini recente » Cod sursa (job #2051025) | Cod sursa (job #1834654) | Cod sursa (job #1543449)
#include<stdio.h>
#define MAXN 200005
FILE *f=fopen("rmq.in","r"), *g=fopen("rmq.out","w");
int N, Q, RMQ[MAXN][20], log[MAXN], doi[20], logN;
int Min( int A, int B ){ if(A<B) return A; return B; }
void Citire(){
int i;
fscanf(f,"%d %d\n",&N,&Q);
for(i=1;i<=N;i++)
fscanf(f,"%d",&RMQ[i][0]);
for(i=2;i<=100000;i++)
log[i] = log[i/2] + 1;
logN = log[N];
doi[0] = 1;
for(i=1;i<=17;i++)
doi[i] = doi[i-1] * 2;
}
void CreareRMQ(){
int i, j, l;
for(j=1;j<=logN;j++){
l = doi[j];
for( i = 1; i <= N-l+1; i++ )
RMQ[i][j] = Min( RMQ[i][j-1], RMQ[ i+ (l/2) ][j-1] );
}
}
void Rezolvare(){
int q, x, y, logD, doiD, D;
for(q=1;q<=Q;q++){
fscanf(f,"%d %d\n",&x,&y);
D = x-y+1;
logD = log[D];
doiD = doi[logD];
fprintf(g,"%d\n",Min( RMQ[x][logD], RMQ[y-doiD+1][logD] ) );
}
}
int main(){
Citire();
CreareRMQ();
Rezolvare();
return 0;
}