Pagini recente » Cod sursa (job #1492567) | Cod sursa (job #1337982) | Cod sursa (job #1211135) | Cod sursa (job #1409888) | Cod sursa (job #2212337)
#include <bits/stdc++.h>
using namespace std;
#define int long long
int a[100005],n,m,p[18];
int minim[18][100005];
void Preproces(){
p[0] = 1;
for (int i = 1;i <= 16;i++)
p[i] = p[i-1] * 2;
}
signed main() {
ifstream fin("rmq.in");
ofstream fout("rmq.out");
fin >> n >> m;
for (int i = 1;i <= n;i++){
fin >> a[i];
minim[0][i] = a[i];
}
Preproces();
int pm = 16;
while (p[pm] > n) pm--;
for (int i = 1;i <= pm;i++)
for (int j = 1;j <= n-i+1;j++){
minim[i][j] = min(minim[i-1][j],minim[i-1][j+p[i-1]]);
}
for (int i = 1;i <= m;i++){
int x,y;
fin >> x >> y;
int lung = y-x+1;
int pmm = pm;
while (p[pmm] > lung) pmm--;
fout << min(minim[pmm][x],minim[pmm][y-p[pmm]+1]) << "\n";
}
}