Pagini recente » Cod sursa (job #2364378) | Cod sursa (job #2442802) | Cod sursa (job #1252041) | Cod sursa (job #477860) | Cod sursa (job #328575)
Cod sursa(job #328575)
#include<stdio.h>
#include<string>
using namespace std;
FILE*fin=fopen("rmq.in","r");
FILE*fout=fopen("rmq.out","w");
#define nm 100005
#define min(a,b)((a)<(b)?(a):(b))
int s[nm],l[nm],rmq[20][nm];
int main()
{
int n,q,a,b,i,j,cmp2;
fscanf(fin,"%d%d",&n,&q);
for(i=1;i<=n;i++)
fscanf(fin,"%d",&s[i]);
l[1]=0;
for(i=2;i<=n;i++)
l[i]=l[i/2]+1;
for(i=1;i<=n;i++)
rmq[0][i]=s[i];
for(j=1;(1<<j)<=n;j++)
for(i=1;i+(1<<j)-1<=n;i++)
rmq[j][i]=min(rmq[j-1][i],rmq[j-1][i+(1<<(j-1))]);
for(j=1;j<=q;j++)
{
fscanf(fin,"%d%d",&a,&b);
cmp2=l[b-a+1];
fprintf(fout,"%d\n",min(rmq[cmp2][a],rmq[cmp2][b-(1<<cmp2)+1]));
}
fclose(fin);
fclose(fout);
return 0;
}