Pagini recente » Cod sursa (job #2838046) | Cod sursa (job #321716) | Cod sursa (job #892283) | Cod sursa (job #193598) | Cod sursa (job #328630)
Cod sursa(job #328630)
#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))
#define maxbuf 65536
int s[nm],l[nm],rmq[20][nm],ind;
char buf[maxbuf];
inline void refbuf()
{
int ans=fread(buf,1,maxbuf,fin);
if(ans<maxbuf) buf[ans]=0;
ind=0;
}
inline int readnr()
{
int ans=0;
one:
while(ind<maxbuf&&!isdigit(buf[ind])) ind++;
if(ind==maxbuf)
{
refbuf();
goto one;
}
two:
while(ind<maxbuf&&isdigit(buf[ind]))
{
ans=ans*10+buf[ind]-'0';
ind++;
}
if(ind==maxbuf)
{
refbuf();
goto two;
}
return ans;
}
int main()
{
int n,q,a,b,i,j,cmp2;
refbuf();
n=readnr();
q=readnr();
for(i=1;i<=n;i++)
s[i]=readnr();
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++)
{
a=readnr();
b=readnr();
cmp2=l[b-a+1];
int rez=min(rmq[cmp2][a],rmq[cmp2][b-(1<<cmp2)+1]);
fprintf(fout,"%d\n",rez);
}
fclose(fin);
fclose(fout);
return 0;
}