Pagini recente » Cod sursa (job #1626697) | Cod sursa (job #457426) | Cod sursa (job #3151629) | Cod sursa (job #1428159) | Cod sursa (job #1424616)
#include <iostream>
#include <deque>
#include <vector>
#include <cstring>
#include <bitset>
#include <algorithm>
#define INF 1000010
#define uint unsigned int
#define ll long long
#define step(x) (x&(-x))
using namespace std;
int N, M, i, j, A[100010], rmq[20][100010], x, y;
int lg(int X)
{
int sol = 0;
while(X)
{
sol = sol + 1;
X = X / 2;
}
return sol;
}
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", &rmq[0][i]);
}
for(i = 1; (1<<i) <= N; i++)
for(j = 1; j <= N; j++)
{
rmq[i][j] = rmq[i-1][j];
if(j + (1<<(i-1)) <= N)
rmq[i][j] = min(rmq[i][j], rmq[i-1][j + (1<<(i-1))]);
}
for(;M;--M)
{
scanf("%d%d", &x, &y);
i = lg(y - x + 1) - 1;
printf("%d\n", min(rmq[i][x], rmq[i][y - (1<<i) + 1]));
}
return 0;
}