Pagini recente » Cod sursa (job #1561772) | Cod sursa (job #272398) | Cod sursa (job #1496032) | Cod sursa (job #50833) | Cod sursa (job #1932466)
#include <stdio.h>
#define N 100005
#define log 18
int n,m,i,j,q,x,y,ans,p;
int rmq[log][N],log2[N],p2[log];
void init()
{
p2[0]=1;
for(i=1;i<log;i++)
p2[i]=p2[i-1]*2;
}
int min(int a,int b)
{
if(a<b)
return a;
return b;
}
int main()
{
FILE *f1,*f2;
f1=fopen("rmq.in","r");
f2=fopen("rmq.out","w");
init();
fscanf(f1,"%d%d",&n,&m);
q=1;
for(i=1;i<=n;i++)
{
fscanf(f1,"%d",&rmq[0][i]);
log2[i]=log2[i-1];
if(i>p2[q])
{
log2[i]++;
q++;
}
}
for(j=1;p2[j]<=n;j++)
{
for(i=1;i<=n;i++)
{
y=min(n,i+p2[j-1]);
rmq[j][i]=min(rmq[j-1][i],rmq[j-1][y]);
}
}
/*for(j=0;p2[j]<=n;j++)
{
for(i=1;i<=n;i++)
printf("%d ",rmq[j][i]);
printf("\n");
}*/
//for(i=1;i<=n;i++)
// printf("%d ",log2[i]);
for(i=0;i<m;i++)
{
fscanf(f1,"%d%d",&x,&y);
p=log2[y-x+1];
ans=min(rmq[p][x],rmq[p][y-p2[p]+1]);
//printf("%d %d %d %d \n",x,y,p,p2[p]);
fprintf(f2,"%d\n",ans);
}
return 0;
}