Pagini recente » Cod sursa (job #2062523) | Cod sursa (job #2807422) | Cod sursa (job #2966409) | Cod sursa (job #3194658) | Cod sursa (job #2562705)
#include <bits/stdc++.h>
#define Dim 2*50001
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int rmq[Dim][20],A[Dim],N,M,a,b;
int main()
{
f>>N>>M;
for(int i=1;i<=N;i++) f>>A[i];
for(int i=1;i<=N;i++) rmq[i][0]=i;
for(int j=1;j<=log2(N);j++)
for(int i=1;i+(1<<j)-1<=N;i++)
if( A[ rmq[i][j-1] ] < A[ rmq[ i + ( 1 << ( j - 1 ) ) ][j-1] ] )
rmq[i][j]=rmq[i][j-1];
else rmq[i][j]=rmq[ i+ ( 1 << (j-1) ) ][j-1];
for(int i=1;i<=M;i++)
{
f>>a>>b;
if( a > b ) swap(a,b);
int lg=log2(b-a+1);
if( A[rmq[a][lg]] < A[rmq[ b - (1<<lg) + 1 ][ lg ]] )
g<<A[rmq[a][lg]];
else g<<A[rmq[ b-(1<<lg)+1][lg]];
g<<'\n';
}
return 0;
}