Pagini recente » Cod sursa (job #72968) | Cod sursa (job #1933294)
#include <iostream>
#include <fstream>
#include <vector>
#include <climits>
#include <queue>
using namespace std;
ifstream in("rmq.in");
ofstream out("rmq.out");
const int NMax = 1e5 + 5;
const int inf = 1e9;
int N,M;
int v[NMax],mn[1000 + 5];
int main() {
in>>N>>M;
for (int i=1;i<=N;++i) {
in>>v[i];
}
int root=1;
for (;root*root<=N;++root) ;
--root;
for (int i=1;i*root<=N;++i) {
mn[i] = inf;
int lim = i*root;
for (int j = (i-1)*root + 1; j <= lim;++j) {
mn[i] = min(mn[i],v[j]);
}
}
while (M--) {
int a,b,drA,stB;
in>>a>>b;
int ans = inf;
int i = 1;
while (root*i < a) {
++i;
}
drA = min(b,i*root);
++i;
while (i*root < b) {
ans = min(ans,mn[i]);
++i;
}
stB = max(a,(i-1)*root + 1);
for (int i=a;i<=drA;++i) {
ans = min(ans,v[i]);
}
for (int i=stB;i<=b;++i) {
ans = min(ans,v[i]);
}
out<<ans<<'\n';
}
return 0;
}