Pagini recente » Cod sursa (job #2458482) | Cod sursa (job #387515) | Cod sursa (job #2054749) | Cod sursa (job #942521) | Cod sursa (job #1714705)
///Nrx imi va datora un suc
#include <bits/stdc++.h>
using namespace std;
int v[17][100005], p[100005];
int n;
void build(int n) {
int t;
for(int i=1; i<=n; i<<=1)
++p[i];
for(int i=1; i<=n; ++i)
p[i]+=p[i-1];
for(int i=2; i<=16; ++i) {
v[i][0] = 2e9;
for(int j=1; j<=min(n, 1<<i-1); ++j)
v[i][j] = min(v[1][j], v[i][j-1]);
for(int j=(1<<i-1)+1; j<=n; ++j)
v[i][j] = min(v[i-1][j], v[i-1][j-(1<<i-2)]);
}
}
inline int query(int x, int y) {
int step = p[y-x];
return min(v[step][y], v[step][x+(1<<step-1)-1]);
}
int main(void) {
FILE *fi = fopen("rmq.in", "r");
FILE *fo = fopen("rmq.out", "w");
int m, x, y;
fscanf(fi,"%d %d",&n,&m);
for(int i=1; i<=n; ++i) {
fscanf(fi,"%d",&v[1][i]);
}
build(n);
for(int i=1; i<=m; ++i) {
fscanf(fi,"%d%d",&x,&y);
fprintf(fo,"%d\n",query(x, y));
}
fclose(fi);
fclose(fo);
return 0;
}