Pagini recente » Cod sursa (job #2072618) | Cod sursa (job #132000) | Cod sursa (job #882387) | Cod sursa (job #2085458) | Cod sursa (job #2155689)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int Query(int x,int y,vector<vector<int>>&rmq)
{
int len=y-x;
int p=31-__builtin_clz(len);
return min(rmq[p][x],rmq[p][y-(1<<p)+1]);
}
void AddLine(int p,vector<vector<int>>&rmq)
{
int n=rmq[0].size()-1,len=(1<<p);
vector<int>line(n-len+2);
for(int l=1,m=(len+1)/2,r=len;r<=n;l++,r++,m++)
{
line[l]=min(Query(l,m,rmq),Query(m+1,r,rmq));
}
rmq.push_back(line);
}
int main()
{
int n,q;
fin>>n>>q;
vector<vector<int>>rmq(1);
rmq[0].resize(n+1);
for(int i=1;i<=n;i++)
fin>>rmq[0][i];
for(int p=1;n>(1<<p);p++)
{
AddLine(p,rmq);
}
int x,y;
for(;q;q--)
{
fin>>x>>y;
fout<<Query(x,y,rmq)<<'\n';
}
return 0;
}