Pagini recente » Rezultatele filtrării | Cod sursa (job #313025) | Cod sursa (job #838047) | Rezultatele filtrării | Cod sursa (job #304789)
Cod sursa(job #304789)
#include<fstream.h>
#include<math.h>
int m[100000][18],N,M,x,y,A[100000],i,j,k;
int main()
{ifstream f("rmq.in");
ofstream g("rmq.out");
f>>N>>M;
for(;i<N;++i)
f>>A[i];
for(i=0;i<N;++i)
m[i][0]=i;
for(j=1;1<<j<=N;++j)
for(i=0;i+(1<<j)-1<N;++i)
if(A[m[i][j-1]]<A[m[i+(1<<(j-1))][j-1]])
m[i][j]=m[i][j-1];
else
m[i][j]=m[i+(1<<(j-1))][j-1];
for(;M;--M)
{f>>x>>y;--x;--y;
k=log(y-x+1)/log(2);
if(A[m[x][k]]<=A[m[y-(1<<k)+1][k]])
g<<A[m[x][k]]<<'\n';
else
g<<A[m[y-(1<<k)+1][k]]<<'\n';
}
return 0;
}