Pagini recente » Cod sursa (job #657639) | Cod sursa (job #158345) | Cod sursa (job #2575438) | Cod sursa (job #1151236) | Cod sursa (job #1423285)
#include <fstream>
#include <iostream>
using namespace std;
int n,m,i,j, a, b,p;
int D[19][100010];
int P[100010];
int main() {
ifstream fin ("rmq.in");
ofstream fout("rmq.out");
fin>>n>>m;
for (i=1;i<=n;i++)
fin>>D[0][i];
for (i=1;(1<<i) <= n; i++) {
for (j=1;j<=n;j++) {
D[i][j] = D[i-1][j];
if (j + ( 1<<(i-1) ) <= n && D[i][j] > D[i-1][ j + ( 1<<(i-1) ) ])
D[i][j] = D[i-1][ j + ( 1<<(i-1) ) ];
}
}
P[1] = 0;
for (i=2;i<=n;i++)
P[i] = 1 + P[i/2];
for (i=1;i<=m;i++) {
fin>>a>>b;
p = P[b-a+1];
fout<<min(D[p][a], D[p][ b- (1<<p) + 1 ])<<"\n";
}
return 0;
}