Pagini recente » Cod sursa (job #329390) | Cod sursa (job #2927665) | Cod sursa (job #818269) | Cod sursa (job #2556525) | Cod sursa (job #2574519)
#include<fstream>
#include<algorithm>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int n,rmq[20][100002],p[20],e[100002];
void calc()
{
int i,x=2,k=1;
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,k=0,y,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;
p[k]=x;
}
calc();
for(i=1;i<=m;i++)
{
f>>x>>y;
k=e[y-x+1];
z=p[k];
g<<min(rmq[k][x],rmq[k][y-z+1])<<'\n';
}
return 0;
}