Pagini recente » Cod sursa (job #2881136) | Cod sursa (job #704187) | Cod sursa (job #560205) | Cod sursa (job #675400) | Cod sursa (job #2164862)
#include <stdio.h>
#include <math.h>
#include <iostream>
using namespace std;
FILE*f=fopen("rmq.in","r");
FILE*g=fopen("rmq.out","w");
int sol,b,a2,j,t,a[100001],v[100001],n,m,i,j2,rmq[100001][20];
int main()
{
fscanf(f,"%d%d",&n,&m);
for(i=1;i<=n;i++)
fscanf(f,"%d",&v[i]);
for(i=1;i<=n;i++)rmq[i][0]=i;
for(j=1;(1<<j)<=n;j++)
for(i=1;i<=n-(1<<j)+1;i++)
{
if(v[rmq[i][j-1]]<v[rmq[i+(1<<(j-1))][j-1]]) rmq[i][j]=rmq[i][j-1];
else rmq[i][j]=rmq[i+(1<<(j-1))][j-1];
}
for(t=1;t<=m;t++){
fscanf(f,"%d%d",&a2,&b);sol=100001;
int dif=b-a2+1;
int l=(int)(log2(dif));
fprintf(g,"%d\n",min(v[rmq[a2][l]],v[rmq[b-(1<<l)+1][l]]));
}
return 0;
}