Pagini recente » Cod sursa (job #2298502) | Cod sursa (job #299386) | Cod sursa (job #3169764) | Cod sursa (job #1788938) | Cod sursa (job #1357879)
#include<stdio.h>
int d[1000000][17];
int lg[1000000];
int main()
{
FILE *fin,*fout;
fin=fopen("rmq.in","r");
fout=fopen("rmq.out","w");
int m,n;
lg[0]=0;
fscanf(fin,"%d %d",&m,&n);
int a[m];
for(int i=0;i<m;i++)
{
fscanf(fin,"%d",&a[i]);
}
int t;
for(int i=1;i<m;i++)
{
t=i;
while(t%2==0)
{
t/=2;
}
if(t==1&&i!=1)
{
lg[i]=lg[i-1]+1;
}
else
{
lg[i]=lg[i-1];
}
}
for(int i=0;i<m;i++)
{
d[i][0]=i;
}
for(int j=1;j<17;j++)
{
for(int i=0;i<m;i++)
{
if(a[d[i][j-1]]<=a[d[i+(1<<(j-1))][j-1]]&&i+(1<<(j-1))<m)
{
d[i][j]=d[i][j-1];
}
else if(i+(1<<(j-1))<m)
{
d[i][j]=d[i+(1<<(j-1))][j-1];
}
}
}
int t2;
for(int i=0;i<n;i++)
{
fscanf(fin,"%d %d",&t,&t2);
t--;
t2--;
if(a[d[t][lg[t2-t+1]]]<=a[d[t2-(1<<(lg[t2-t+1]))+1][lg[t2-t+1]]])
{
fprintf(fout,"%d\n",a[d[t][lg[t2-t+1]]]);
}
else
{
fprintf(fout,"%d\n",a[d[t2-(1<<(lg[t2-t+1]))+1][lg[t2-t+1]]]);
}
}
}