Pagini recente » Cod sursa (job #184250) | Cod sursa (job #1137167) | Cod sursa (job #1582432) | Cod sursa (job #2064756) | Cod sursa (job #2503468)
#include <bits/stdc++.h>
#define MAX 100010
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int n, m;
int v[MAX];
int rmq[20][MAX];
int lg[MAX];
void dostuff(){
f>>n>>m;
for (int i = 1; i <= n; i++){
f >> v[i];
}
lg[2] = 1;
for (int i = 3; i<=n; i++){
lg[i] = lg[i/2]+1;
}
}
void domorestuff(){
for (int i = 1; i <= n; i++){
rmq[0][i]=v[i];
}
for (int i = 1, j, p = 2; p <= n; i++, p *= 2){
for (j = 1; j+p-1 <= n; j++){
rmq[i][j]=min(rmq[i-1][j], rmq[i-1][j+p/2]);
}
}
}
void doevenmorestuff(){
int x, y, p;
while (m--){
f >> x >> y;
p = lg[y-x+1];
g << min(rmq[p][x], rmq[p][y-(1<<p)+1]) << "\n";
}
}
int main()
{
ios_base::sync_with_stdio(false);
dostuff();
domorestuff();
doevenmorestuff();
return 0;
}