Pagini recente » Cod sursa (job #2448889) | Cod sursa (job #217386) | Cod sursa (job #161027) | Cod sursa (job #1417821) | Cod sursa (job #1393879)
#include <cstdio>
#define NMAX 100005
#define INF 1<<30
using namespace std;
FILE* fin=fopen("rmq.in","r");
FILE* fout=fopen("rmq.out","w");
int rmq[NMAX][32],t[NMAX],n,m,log2[NMAX];
int query(int st,int dr);
int minim(int a,int b)
{
if (a<b) return a; return b;
}
int main()
{
int i,j,a,b,L;
fscanf(fin,"%d %d",&n,&m);
for(i=2;i<=n;++i)
log2[i]=log2[i/2]+1;
for (i=1; i<=n; i++)
{
fscanf(fin,"%d",&t[i]);
rmq[i][0]=t[i];
}
for (j=1; (1<<j)<=n; j++)
for (i=1; i<=n-(1<<j)+1; i++)
{
L=(1<<(j-1));
rmq[i][j]=minim(rmq[i][j-1],rmq[i+L][j-1]);
}
for (i=1; i<=m; i++)
{
fscanf(fin,"%d %d",&a,&b);
fprintf(fout,"%d\n",query(a,b));
}
return 0;
}
int query(int st,int dr)
{
int i,nr,L,l;
nr=dr-st+1;
L=log2[nr];
l=nr-(1<<L);
return minim(rmq[st][L], rmq[st+l][L]);
}