Pagini recente » Cod sursa (job #3129998) | Cod sursa (job #582191) | Cod sursa (job #1788713) | Cod sursa (job #1977759) | Cod sursa (job #589516)
Cod sursa(job #589516)
#include<stdio.h>
#include<math.h>
using namespace std;
FILE *f,*g;
long n,m,x,y,i,j,k,b[100001],a[100001][17];
int main()
{
f=fopen("rmq.in","r");
g=fopen("rmq.out","w");
fscanf(f,"%ld",&n);
fscanf(f,"%ld",&m);
for(i=1;i<=n;i++)
fscanf(f,"%ld",&b[i]);
for(i=1;i<=n;i++)
a[i][0]=i;
for(j=1;(1<<j)<n;j++)
for(i=0;i+(1<<j)-1<=n;i++)
{
if(b[a[i][j-1]]<b[a[i+(1<<j-1)][j-1]]) a[i][j]=a[i][j-1];
else a[i][j]=a[i+(1<<j-1)][j-1];
}
/*for(i=1;i<=n;i++)
{
for(j=0;(1<<j)<n;j++)
fprintf(g,"%ld ",a[i][j]);
fprintf(g,"\n");
}*/
for(x=1;x<=m;x++)
{
fscanf(f,"%ld",&i);
fscanf(f,"%ld",&j);
k=int(log(j-i+1));
if(b[a[i][k]]>b[a[j-((1<<k)-1)][k]]) fprintf(g,"%ld",b[a[j-((1<<k)-1)][k]]);
else fprintf(g,"%ld",b[a[i][k]]);
fprintf(g,"\n");
}
fclose(f);
fclose(g);
return 0;
}