Pagini recente » Cod sursa (job #3280144) | Cod sursa (job #2548946) | Cod sursa (job #154494) | Cod sursa (job #1121246) | Cod sursa (job #2883856)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int LOG[100001], n, m, x, y;
vector<int> rmq[100002];
void compute_log()
{
LOG[1]=0;
for(int i=2; i<=n; i++)
LOG[i] = LOG[i/2] + 1;
}
void build_rmq()
{
for(int p=1;p<=LOG[n];p++)
for(int i=1; i<=n; i++)
{
if(i+(1<<p)-1 > n)
break;
rmq[i][p]=min(rmq[i][p-1], rmq[i+(1<<(p-1))][p-1]);
}
}
int main()
{
fin>>n>>m;
compute_log();
for(int i=1;i<=n;i++)
{
rmq[i].resize(LOG[n]+1);
fin>>rmq[i][0];
}
build_rmq();
for(int i=0; i<m; i++)
{
fin>>x>>y;
int exp=LOG[y-x+1];
fout<< min(rmq[x][exp], rmq[y - (1<<exp) +1][exp])<<'\n';
}
return 0;
}