Pagini recente » Cod sursa (job #726005) | Cod sursa (job #770031) | Cod sursa (job #666508) | Cod sursa (job #1814067) | Cod sursa (job #2392457)
#include <fstream>
using namespace std;
int n,Q,x,y,k,p,i,j,Min1,Min2,poz[200005][40],pw[100],lg[100005],v[100005];
int main()
{
ifstream f("rmq.in");
ofstream g("rmq.out");
f>>n>>Q;
for(i=1;i<=n;i++)
f>>v[i];
pw[0]=1;
for(i=1;i<=30;i++)
pw[i]=pw[i-1]*2;
k=0;
for(i=1;i<=n;i++)
if(pw[k+1]==i)
{
k++;
lg[i]=k;
}
else
lg[i]=k;
k=lg[n]+1;
for(i=1;i<=n;i++)
poz[i][0]=i;
for(j=1;j<=k;j++)
for(i=1;i<=n;i++)
{
p=pw[j-1];
if(v[poz[i][j-1]]<v[poz[i+p][j-1]])
poz[i][j]=poz[i][j-1];
else
poz[i][j]=poz[i+p][j-1];
}
for(i=1;i<=Q;i++)
{
f>>x>>y;
k=y-x;
k=lg[k];
Min1=v[poz[x][k]];
p=y-x-pw[k]+1;
Min2=v[poz[x+p][k]];
g<<min(Min1,Min2)<<'\n';
}
return 0;
}