Pagini recente » Cod sursa (job #606889) | Cod sursa (job #1669499) | Cod sursa (job #832426) | Cod sursa (job #2897191) | Cod sursa (job #1087027)
#include <fstream>
#define DIMN 10010
#define DIMM 100010
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int L[DIMN], V[DIMN];
int n, i, x, y, len, j, m;
int D[20][DIMN];
//D[i][j] minimul din secventa de lungime 2^i ce incepe la pozitia j
int minim(int a, int b) {
if (a < b)
return a;
else
return b;
}
int main() {
fin>>n>>m;
for (i=1;i<=n;i++)
fin>>V[i];
L[1] = 0;
for (i=2;i<=n;i++)
L[i] = 1 + L[i/2];
for (j=1;j<=n;j++)
D[0][j] = V[j];
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))];
}
}
while (m) {
fin>>x>>y;
len = L[y-x+1];
fout<<minim(D[len][x], D[len][y-(1<<len)+1])<<"\n";
m--;
}
return 0;
}