Pagini recente » Cod sursa (job #2494044) | Cod sursa (job #892398) | Cod sursa (job #2316053) | Cod sursa (job #646533) | Cod sursa (job #2164798)
#include <iostream>
#include <fstream>
#include <vector>
#include <math.h>
#define NMAX 100001
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int n, m;
vector <int> v;
int M[NMAX][20];
void preCalcul()
{
int i, j;
for(j=1; 1<<j<=n; ++j)
for(i=1; i + (1<<j) - 1<=n; ++i)
if(v[M[i][j - 1]] < v[M[i + (1 << (j - 1))][j - 1]])
M[i][j] = M[i][j - 1];
else
M[i][j] = M[i + (1 << (j - 1))][j - 1];
}
int query(int x, int y)
{
int k = log2(y - x + 1);
if (v[M[x][k]] < v[M[y - (1<<k)][k]])
return v[M[x][k]];
return v[M[y - (1<<k)][k]];
}
int main()
{
int i, j, x, y;
f>>n>>m;
for(i=1; i<=n; ++i) {
f>>x;
v.push_back(x);
M[i][0] = i;
}
preCalcul();
for(i=1; i<=m; ++i) {
f>>x>>y;
g<<query(x, y)<<'\n';
}
return 0;
}