Pagini recente » Cod sursa (job #2617171) | Cod sursa (job #2244516) | Cod sursa (job #2278815) | Cod sursa (job #193004) | Cod sursa (job #2822004)
#include <iostream>
#include <fstream>
#include <cmath>
#define MAX 100002
using namespace std;
int n,m,v[MAX],x,y,st[MAX][102];
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int main()
{
fin >> n >> m;
for(int i = 1; i <= n; i++){
fin >> v[i];
}
/// st[i][j] = elementul minim de la i pana la i+2^j-1;
/// intializam mai intai separat segmentele de lungime = 1
for(int i = 1; i <= n; i++){
st[i][0] = v[i];
}
for(int j = 1; j <= log2(n); j++){
for(int i = 1; i+(1<<j-1) <= n; i++){
/// impartim st[i][j] in 2 parti egale
st[i][j] = min(st[i][j-1], st[i+(1<<j-1)][j-1]);
}
}
for(int i = 1; i <= m; i++){
fin >> x >> y;
/// determinam cea mai mica putere de 2 <= len
int len = y-x+1;
int exp = log2(len);
fout << min(st[x][exp], st[y-(1<<exp)+1][exp]) << "\n";
}
return 0;
}