Pagini recente » Cod sursa (job #2207588) | Cod sursa (job #2295008) | Cod sursa (job #1543689) | Cod sursa (job #62951) | Cod sursa (job #1678319)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("rmq.in");
ofstream out("rmq.out");
int n, m, rmq[100002][40], a[100002];
int log[100002];
int main()
{
in>>n>>m;
log[1]=0;
for(int i=1;i<=n;i++){
in>>a[i];
if(i>=2)
log[i] = 1+log[i/2];
if(i>=1)
rmq[i][0] = a[i];
}
for(int j=1;(1<<j)<n;j++)
{
for(int i=1;i+(1<<j)-1<=n;i++)
{
rmq[i][j] = min(rmq[i][j-1], rmq[i+(1<<j)-1][j-1]);
cout<<i<<" "<<j<<" "<<rmq[i][j]<<"\n";
}
}
int p, q;
for(int i=0;i<m;i++)
{
in>>p>>q;
int k = log[q-p+1];
out<<min(rmq[p][k], rmq[q-(1<<k)+1][k])<<"\n";
}
return 0;
}