Pagini recente » Cod sursa (job #2595301) | Cod sursa (job #2383261) | Cod sursa (job #132426) | Cod sursa (job #177455) | Cod sursa (job #3356615)
#include <bits/stdc++.h>
#define nmax 100002
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int sp[nmax][20];
vector<int> arr;
int n,q,st,dr;
void build_sp() {
for (int i=1;i<=n;i++) sp[i][0]=arr[i];
for (int j=1;j<=log2(n);j++) {
for (int i=0;i<=n;i++) {
if (i+(1<<j)-1<=n) {
sp[i][j]=min(sp[i][j-1],sp[i+(1<<(j-1))][j-1]);
}
}
}
}
int query(int st, int dr) {
int len=dr-st+1;
int k=log2(len);
return min(sp[st][k],sp[dr-(1<<k)+1][k]);
}
int main() {
f>>n>>q;
arr.resize(n+1);
arr[0]=INT_MAX;
for (int i=1;i<=n;i++) f>>arr[i];
build_sp();
for (int i=1;i<=q;i++) {
f>>st>>dr;
g<<query(st,dr)<<'\n';
}
}