Pagini recente » Cod sursa (job #191131) | Cod sursa (job #661828) | Cod sursa (job #478714) | Cod sursa (job #1731589) | Cod sursa (job #2751432)
#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[100002][18];
long int vec[100002];
for(int i=0;i<n;i++){
in >> ans[i][0];
}
for (int i = 2; i <= n; ++i)
vec[i] = 1 + vec[i / 2];
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 (ans[i][j-1]<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 temp = vec[y - x + 1];
if (ans[x][temp]<=ans[y-(1<<temp)+1][temp]){
cout << ans[x][temp] << "\n";
}else{
cout << ans[y-(1<<temp)+1][temp] << "\n";
}
}
return 0;
}