Pagini recente » Cod sursa (job #987113) | Cod sursa (job #1065807) | Cod sursa (job #1200577) | Cod sursa (job #3229985) | Cod sursa (job #696866)
Cod sursa(job #696866)
#include <stdio.h>
#include <vector>
#include <fstream>
#define minim(a,b) ((a>b)?b:a)
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int n,m,v[100005],rmq[100005][20],mk[100005];
int i,k,lg,dif,z1,z2,exp,lim;
int main()
{
f>>n>>m;
for(i=1;i<=n;i++) f>>v[i];
for(i=1;i<=n;i++) rmq[i][0]=v[i];
for(k=1;(1<<k)<=n;k++)
{
lim=n-(1<<k)+1;
for(i=1;i<=lim;i++)
{
lg=(1<<(k-1));
rmq[i][k]=minim(rmq[i][k-1],rmq[i+lg][k-1]);
}
}
mk[1]=0;
for(i=2;i<=n;i++)
mk[i]=mk[i/2]+1;
for(i=1;i<=m;i++)
{
f>>z1>>z2;
lg=z2-z1+1;
exp = mk[lg];
dif=lg-(1<<exp);
g<<minim(rmq[z1][exp],rmq[z1+dif][exp])<<'\n';
}
f.close();
g.close();
return 0;
}