Pagini recente » Cod sursa (job #1429404) | Cod sursa (job #2779155) | Cod sursa (job #65404) | Cod sursa (job #2253770) | Cod sursa (job #2898182)
#include <iostream>
#include <fstream>
using namespace std;
const int N=1e5;
const int L=16;
int r[L+1][N+1], log[N+1];
int minim(int st, int dr)
{
int l=log[dr-st+1];
int p=(1<<l);
return min(r[l][st+p-1],r[l][dr]);
}
int main()
{
ifstream in("rmq.in");
ofstream out("rmq.out");
int n,q;
in>>n>>q;
for(int j=1;j<=n;j++)
{
in>>r[0][j];
}
for(int i=1;(1<<i)<=n;i++)
for(int j=(1<<i);j<=n;j++)
{
int p=(1<<(i-1));
r[i][j]=min(r[i-1][j-p],r[i-1][j]);
}
log[1]=0;
for(int j=2;j<=n;j++)
log[j]=1+log[j/2];
for(int i=0;i<q;i++)
{
int st,dr;
in>>st>>dr;
out<<minim(st,dr)<<"\n";
}
return 0;
}