Pagini recente » Cod sursa (job #1360847) | Cod sursa (job #2999597) | Cod sursa (job #2459999) | Cod sursa (job #608672) | Cod sursa (job #265911)
Cod sursa(job #265911)
#include<stdio.h>
#define maxn 100001
#define logmax 18
FILE *f=fopen("rmq.in","r"), *g=fopen("rmq.out","w");
long int a[maxn],log[maxn],rmq[maxn][logmax],i,j,x,y,n,m;
inline long int min(long int x, long int y)
{
if(x<y) return x;
return y;
}
int main()
{
fscanf(f,"%ld %ld",&n,&m);
for(i=1;i<=n;i++) fscanf(f,"%ld",&a[i]);
log[1]=0;
for(i=2;i<=n;i++)
log[i]=log[i/2]+1;
for(i=1;i<=n;i++)
rmq[i][0]=a[i];
for(j=1;(1<<j)<=n;j++)
for(i=1;i<=n-(1<<j)+1;i++)
rmq[i][j]=min(rmq[i][j-1],rmq[i+(1<<(j-1))][j-1]);
for(i=1;i<=m;i++)
{
fscanf(f,"%ld %ld",&x,&y);
int k=log[y-x+1];
fprintf(g,"%ld\n",min(rmq[x][k],rmq[y-(1<<k)+1][k]));
}
fclose(f);
fclose(g);
return 0;
}