Pagini recente » Cod sursa (job #412312) | Cod sursa (job #2846838) | Cod sursa (job #479566) | Cod sursa (job #37553) | Cod sursa (job #155976)
Cod sursa(job #155976)
#include<stdio.h>
FILE*fin=fopen("rmq.in","r");
FILE*fout=fopen("rmq.out","w");
#define maxn 100001
#define min(a,b)((a)<(b)?(a):(b))
long p2[21],a[maxn],rmq[maxn][21],n,m,x,y,nr;
int main()
{
int i,p;
fscanf(fin,"%ld%ld",&n,&m);
for(i=1;i<=n;i++)
{
fscanf(fin,"%ld",&a[i]);
rmq[i][0]=a[i];
}
p2[0]=1;
for(i=1;i<=20;i++)
p2[i]=p2[i-1]*2;
for(p=1;p<=20;p++)
for(i=1;i<=n-p2[p]+1;i++)
rmq[i][p]=min(rmq[i][p-1],rmq[i+p2[p-1]][p-1]);
for(i=1;i<=m;i++)
{
fscanf(fin,"%ld%ld",&x,&y);
nr=y-x+1;
for(p=20;p>=0;p--)
if(nr&p2[p]) break;
if(rmq[x][p]<rmq[y-p2[p]+1][p]) fprintf(fout,"%ld\n",rmq[x][p]);
else fprintf(fout,"%ld\n",rmq[y-p2[p]+1][p]);
}
fclose(fin);
fclose(fout);
return 0;
}