Pagini recente » Cod sursa (job #2736326) | Cod sursa (job #280922) | Cod sursa (job #3260269) | Cod sursa (job #2534886) | Cod sursa (job #533803)
Cod sursa(job #533803)
// Complexitate: <O(nlogn), O(1)>
#include<fstream>
#include<cmath>
#define maxn 100005
#define maxm 1000005
using namespace std;
int n, m;
int a[maxn], v[maxn];
int c[maxn][20];
int main() {
ifstream f("rmq.in");
ofstream g("rmq.out");
f >> n >> m;
int i, j;
int x, y, minim;
for (i = 1; i <= n; i++)
f >> a[i];
for (i = 1; i <= n; i++)
c[i][0] = a[i];
for (j = 1; (1<<j) <= n; j++) {
for (i = 1; i + (1<<j) - 1 <= n; i++) {
c[i][j] = c[i][j-1];
if (c[i+(1<<(j-1))][j-1] < c[i][j])
c[i][j] = c[i+(1<<(j-1))][j-1];
}
}
for (i = 1; i <= m; i++) {
f >> x >> y;
int t = 0, tt = 1;
int dif = y - x + 1;
while (tt < dif) {
tt = 2*tt;
t++;
}
t--;
minim = c[x][t];
if (c[y-(1<<t)+1][t] < minim)
minim = c[y-(1<<t)+1][t];
g << minim << '\n';
}
}