Pagini recente » Cod sursa (job #1971985) | Cod sursa (job #3188072) | Cod sursa (job #2233586) | Cod sursa (job #2577372) | Cod sursa (job #1809710)
#include <cstdio>
#include <algorithm>
using namespace std;
FILE *f=fopen("rmq.in","r");
FILE *g=fopen("rmq.out","w");
int dp[100005][20],a,b;
int N,Q;
int main()
{
fscanf(f,"%d%d",&N,&Q);
for(int i=1;i<=N;i++)
fscanf(f,"%d",&dp[i][0]);
for(int i=N;i;i--)
{
for(int j=1;i+(1<<j)-1<=N;j++)
{
dp[i][j]=min(dp[i][j-1],dp[i+(1<<(j-1))][j-1]);
}
}
while(Q)
{
fscanf(f,"%d%d",&a,&b);
int rez=(1<<30),dist=b-a+1,p2=0;
while(dist)
{
while((dist&1)==0)
{
dist>>=1;
p2++;
}
dist>>=1;
rez=min(rez,dp[a][p2]);
a=a+(1<<p2);
p2++;
}
fprintf(g,"%d\n",rez);
Q--;
}
fclose(f);
fclose(g);
return 0;
}