Pagini recente » Cod sursa (job #672742) | Cod sursa (job #1584777) | Cod sursa (job #410211) | Cod sursa (job #2278206) | Cod sursa (job #2191027)
#include <fstream>
#include <iostream>
#define NMAX 100002
using namespace std;
ifstream f("rmq.in");
ofstream o("rmq.out");
int n,m,dp[17][NMAX];
int get_put2(int st, int dr)
{
int dif = dr - st + 1;
int pt = 1;
while((1 << (pt+1)) <= dif)
pt ++;
return pt;
}
int main()
{
f >> n >> m;
for(int i = 1; i <= n; ++i)
f >> dp[0][i];
for(int i = 1; (1 << i) <= n; ++i)
{
int lim = n + 1 - (1 << i);
//cout << lim << '\n';
for(int j = 1; j <= lim; ++j)
dp[i][j] = min(dp[i-1][j],dp[i-1][j+(1<<(i-1))]);
}
int a,b,put2;
for(int i = 1; i <= m; ++i)
{
f >> a >> b;
put2 = get_put2(a,b);
o << min(dp[put2][a],dp[put2][b-(1<<put2)+1]) << '\n';
}
return 0;
}