Pagini recente » Cod sursa (job #675344) | Cod sursa (job #3287001) | Cod sursa (job #1913308) | Cod sursa (job #1161157) | Cod sursa (job #2164801)
#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) + 1][k]])
return v[M[x][k]];
return v[M[y - (1<<k) + 1][k]];
}
int main()
{
int i, x, y;
f>>n>>m;
v.push_back(0);
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;
}