Pagini recente » petarbore | Cod sursa (job #383909) | Cod sursa (job #227448) | Cod sursa (job #95787) | Cod sursa (job #773098)
Cod sursa(job #773098)
#include <cstdio>
#include <iostream>
#include <vector>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <bitset>
#include <algorithm>
#include <sstream>
#include <iomanip>
#include <cmath>
#include <cstdlib>
#include <ctype.h>
#include <cstring>
#include <ctime>
using namespace std;
#define INF 2000000000
#define MAXS 350
#define MAXN 100005
int A[MAXS];
int v[MAXN];
int k, N, M, x, y;
int main() {
freopen("rmq.in", "r", stdin);
freopen("rmq.out","w", stdout);
scanf("%d %d", &N, &M);
for(int i = 0; i < N; i++)
scanf("%d", &v[i]);
for(k = 1; k * k <= N; k++);
k--;
for(int i = 0; k * i <= N; i++) {
A[i] = INF;
for(int j = k * i; j < k * (i + 1); j++)
A[i] = min(A[i], v[j]);
}
for(int i = 0; i < M; i++) {
scanf("%d %d", &x, &y);
x--; y--;
int res = INF;
int i;
for(i = x; i % k != 0 && i <= y; i++)
res = min(res, v[i]);
for(; i + k < y; i += k)
res = min(res, A[i / k]);
for(; i <= y; i++)
res = min(res, v[i]);
printf("%d\n", res);
}
return 0;
}