Pagini recente » Cod sursa (job #33451) | Cod sursa (job #463518) | Cod sursa (job #363261) | Cod sursa (job #991352) | Cod sursa (job #2916468)
#include<bits/stdc++.h>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int rmq[20][100005],e[100005],val[20],n;
void calculez()
{
int x=2,k=1,i;
while(x<=n)
{
for(i=1;i<=n-x+1;i++)
rmq[k][i]=min(rmq[k-1][i],rmq[k-1][i+x/2]);
x*=2;
k++;
}
}
int main()
{
int m,i,x=1,y,k=0,xx,yy,t,nr,z;
f>>n>>m;
for(i=1;i<=n;i++)
f>>rmq[0][i];
for(i=1;i<=n;i++)
{
if(x*2==i)
{
x*=2;
k++;
}
e[i]=k;
val[k]=x;
}
calculez();
for(i=1;i<=m;i++)
{
f>>xx>>yy;
t=e[yy-xx+1];
z=val[t];
g<<min(rmq[t][xx],rmq[t][yy-z+1])<<'\n';
}
return 0;
}