Pagini recente » Cod sursa (job #1768805) | Cod sursa (job #1698747) | Cod sursa (job #3005718) | Cod sursa (job #1037151) | Cod sursa (job #2266076)
#include <bits/stdc++.h>
using namespace std;
const int NMAX=1e6;
int N, M, i, j, X, Y, A[NMAX+5], K;
int RMQ[33][NMAX+5], ans;
int log2 (int X)
{
int ans=0;
int putere=1;
while(putere<X)
{
putere*=2;
ans++;
}
if(putere>X)
ans--;
return ans;
}
void precalculare()
{
for(int i=1; i<=N; i++)
RMQ[0][i]=A[i];
for(int i=1; i<=log2(N); i++)
for(int j=1; j<=(N-(1<<i)+1); j++)
RMQ[i][j]=min(RMQ[i-1][j], RMQ[i-1][j+(1<<(i-1))]);
}
int main()
{
freopen("rmq.in", "r", stdin);
freopen("rmq.out", "w", stdout);
scanf("%d%d", &N, &M);
for(i=1; i<=N; i++)
scanf("%d", &A[i]);
precalculare();
for(i=1; i<=M; i++)
{
scanf("%d%d", &X, &Y);
if(X==Y)
printf("%d\n", A[X]);
else
{
K=log2(Y-X);
ans=min(RMQ[K][X], RMQ[K][Y-(1<<K)+1]);
printf("%d\n", ans);
}
}
return 0;
}