Pagini recente » Cod sursa (job #398827) | Cod sursa (job #1159824) | Cod sursa (job #1004425) | Cod sursa (job #900997) | Cod sursa (job #2708527)
#include <iostream>
#include<cmath>
#include <fstream>
using namespace std;
ifstream f ("rmq.in");
ofstream g ("rmq.out");
int n,m;
int v[100001];
int dp[100001][20];
int main()
{
f >> n >> m;
for(int i = 1;i<=n;i++)
{
f >> v[i];
}
for(int i = 1;i<=n;i++)
dp[i][0] = i;
for(int j = 1;(1<<j)<=n;j++)
{
int linie_mx = n + 1 - (1<< j);
for(int i = 1;i<=linie_mx;i++)
{
if(v[dp[i][j-1]] < v[dp[i+(1<<(j-1))][j-1]])
dp[i][j] = dp[i][j-1];
else
dp[i][j] = dp[i+(1<<(j-1))][j-1];
}
}
int st,dr;
for(int i = 1;i<=m;i++)
{
f >> st >> dr;
int l = dr- st +1;
int lgn = log2(l);
int rasp = min(v[dp[st][lgn]],v[dp[dr- (1<<lgn)+1][lgn]]);
g << rasp<< endl;
}
}