Cod sursa(job #668268)

Utilizator timeiutzaTimea Balan timeiutza Data 24 ianuarie 2012 17:07:56
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.65 kb
#include<cstdio>
#include<algorithm>
using namespace std;
int n,m,x,y,i,j,log,L,s,beg,end,rmq[20][100010],LG[100010];
void read(),solve();
int main()
{
read();
solve();
return 0;
}
void read()
{
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
scanf("%d%d",&n,&m);
scanf("%d",&rmq[0][1]);
for(i=2;i<=n;i++)
{
scanf("%d",&rmq[0][i]);
LG[i]=LG[i>>1]+1;
}
}
void solve()
{
for(i=1;(1<<i)<=n;i++)
{
for(j=1;j<=n-(1<<i)+1;j++)
{
L=(1<<i-1);
rmq[i][j]=min(rmq[i-1][j],rmq[i-1][j+L]);
}
}
for(;m--;)
{
scanf("%d%d",&beg,&end);
log=LG[end-beg+1];
L=1<<log;
s=end-L+1;
printf("%d\n",min(rmq[log][beg],rmq[log][s]) );
}
}