Pagini recente » Cod sursa (job #1754821) | Cod sursa (job #911284) | Cod sursa (job #1427223) | Cod sursa (job #1050593) | Cod sursa (job #2756090)
#include <bits/stdc++.h>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
const int Nmax=100004 ;
int N,M,i,j,k,x,y,Log2[Nmax];
int RMQ[18][Nmax];
void Get_RMQ()
{
for(i=1;(1<<i)<=N;i++)
{
int k=(1<<i)-1;
int v=1<<(i-1);
for(j=1;j+k<=N;j++)
{
RMQ[i][j]=min(RMQ[i-1][j],RMQ[i-1][j+v]);
}
}
}
void Query(int X,int Y)
{
if(X>Y)
swap(X,Y);
int K=Log2[Y-X+1];
g<<min(RMQ[K][X],RMQ[K][Y-(1<<K)+1])<<"\n";
}
int main()
{
f>>N>>M;
for(i=1;i<=N;i++)
f>>RMQ[0][i];
for(i=2;i<=N;i++)
Log2[i]=Log2[i/2]+1;
Get_RMQ();
while(M--)
{
f>>x>>y;
Query(x,y);
}
return 0;
}