Pagini recente » Cod sursa (job #1754209) | Cod sursa (job #2751399)
#include <iostream>
#include <bits/stdc++.h>
#include <fstream>
using namespace std;
ifstream in("rmq.in");
ofstream out("rmq.out");
int main()
{
long n,m,x,y;
in >> n >> m;
long int ans[10002][18];
long int vec[10002];
for(int i=0;i<n;i++){
in >> vec[i];
}
for (int i=0;i<n;i++){
for (int j=0;j<18;j++){
ans[i][j]=0;//initializam cu 0
}
}
for (int i=0;i<n;i++)
ans[i][0]=i;//prima coloana = cu nr liniei
for(int j=1;(1<<j)<=n;j++)//pana la cea mai mare putere a lui 2 mai mica ca n
{
for (int i=0;(i+(1<<j)-1)<n;i++)
{
if (vec[ans[i][j-1]]<vec[ans[i+(1<<(j-1))][j-1]])
ans[i][j]=ans[i][j-1];
else
ans[i][j]=ans[i+(1<<(j-1))][j-1];
}
}
for(int i=1;i<=m;i++){
in >> x >> y;
x--;
y--;
int j = (int)log2(y - x + 1);
if (vec[ans[x][j]]<=vec[ans[y-(1<<j)+1][j]]){
out << vec[ans[x][j]] << " ";
}else{
out << vec[ans[y-(1<<j)+1][j]] << " ";
}
}
return 0;
}