Pagini recente » Cod sursa (job #2396669) | Statistici Zinnenberg Gruhten (gruhten) | Cod sursa (job #3283196) | Istoria paginii runda/cnitv_gimnaziu_1/clasament | Cod sursa (job #1674307)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <utility>
#include <algorithm>
#include <functional>
#include <string>
#include <cstring>
#include <cmath>
#include <map>
#include <set>
#include <stack>
#define NMAX 100005
#define LOGMAX 18
#define MOD 666013
#define INF 0x3f3f3f3f
#define pb push_back
using namespace std;
typedef pair<int, int> pii;
FILE *fin = fopen("rmq.in","r");
FILE *fout = fopen("rmq.out","w");
int v[NMAX], RMQ[LOGMAX][NMAX], precalclog[NMAX];
int main() {
int i,n,j,m,x,y,dif,k,ramas;
fscanf(fin, "%d%d", &n, &m);
for(i=1;i<=n;++i) {
fscanf(fin, "%d", &v[i]);
RMQ[0][i]=v[i];
}
precalclog[1]=0;
for(i=2;i<=n;++i)
precalclog[i]=precalclog[i/2]+1;
for(i=1;(1<<i)<=n;++i)
for(j=1;j+(1<<i)-1<=n;++j)
RMQ[i][j]=min(RMQ[i-1][j], RMQ[i-1][j+(1<<(i-1))]);
for(i=0;i<m;++i) {
fscanf(fin,"%d %d", &x,&y);
dif=y-x+1;
k=precalclog[dif];
ramas=dif-(1<<k);
fprintf(fout, "%d\n", min(RMQ[k][x], RMQ[k][x+ramas]));
}
return 0;
}