Pagini recente » Sedinta 12 Iunie 2011 | Istoria paginii utilizator/llillliiililili | Cod sursa (job #493896) | Diferente pentru utilizator/funkydvd intre reviziile 49 si 48 | Cod sursa (job #2753364)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int r[103][100003];
int log[100003];
int main()
{
int n,m,i,j,v=1,cl,x,y,k;
long long val;
f>>n>>m;
for(i=1;i<=n;i++)
{
f>>r[0][i];
}
cl=n;
i=0;
while(v<=cl)
{
i++;
for(j=1;j+v<=cl;j++)
{
r[i][j]=min(r[i-1][j],r[i-1][j+v]);
}
cl=cl-v;
v=v*2;
}
log[1]=0;
for(i=2;i<=n;i++)
{
log[i]=log[i/2]+1;
}
for(i=1;i<=m;i++)
{
f>>x>>y;
k=log[y-x+1];
val=1;
for(j=1;j<=k;j++)
{
val=val*2;
}
g<<min(r[k][x],r[k][y-val+1])<<'\n';
}
return 0;
}