Pagini recente » Cod sursa (job #3216698) | Cod sursa (job #2150841) | Cod sursa (job #439170) | Cod sursa (job #1505896) | Cod sursa (job #2395848)
#include <bits/stdc++.h>
using namespace std;
ifstream in("rmq.in");
ofstream out("rmq.out");
int rmq[100000][32],n,a[100001],m;
void build_rmq(){
for(int i=0;i<n;i++)
rmq[i][0]=a[i];
for(int j=1;(1<<j)<=n;j++)
for(int i=0;(i+(1<<j)-1)<n;i++){
if(rmq[i][j-1]<rmq[i+(1<<(j-1))][j-1])
rmq[i][j]=rmq[i][j-1];
else
rmq[i][j]=rmq[i+(1<<(j-1))][j-1];
}
}
int interogare(int i,int j){
int pow=(int)log2(j-i+1);
if(rmq[i][pow]<=rmq[j-(1<<pow)+1][pow])
return rmq[i][pow];
return rmq[j-(1<<pow)+1][pow];
}
int main()
{
in>>n>>m;
for(int i=0;i<n;i++)
in>>a[i];
build_rmq();
for(int i=0;i<n;i++){
for(int j=0;(1<<j)<n;j++)
out<<rmq[i][j]<<" ";
out<<endl;
}
for(int j=1;j<=m;j++){
int st,dr;
in>>st>>dr;
out<<interogare(st-1,dr-1)<<" ";
}
return 0;
}