Pagini recente » Cod sursa (job #1780959) | Cod sursa (job #3344078) | Cod sursa (job #2932634) | Cod sursa (job #273121) | Cod sursa (job #3337998)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int dp[200002][22],n,q,vecpow[22];
int main()
{
fin>>n>>q;
for(int i=1;i<=n;i++)
fin>>dp[i][1];
vecpow[1]=1;
int pow=2,index=2;
while(pow<=n){
vecpow[index]=pow;
for(int i=1;i<=n;i++)
dp[i][index]=min(dp[i][index-1],dp[i+pow/2][index-1]);
pow*=2,index++;
}
index--;
while(q-->0){
int st,fn,dif;fin>>st>>fn;int valmin=67676767;
while(st<=fn){
dif=fn-st+1;
int gogo=(1+index)/2;
while(vecpow[gogo]<=dif && gogo<index)gogo++;
while(vecpow[gogo]>dif && gogo>1)gogo--;
valmin=min(valmin,dp[st][gogo]);
st+=vecpow[gogo];
}
fout<<valmin<<'\n';
}
return 0;
}