Pagini recente » Rezultatele filtrării | Monitorul de evaluare | Campanie | Rezultatele filtrării | Cod sursa (job #2468582)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin ("rmq.in");
ofstream fout ("rmq.out");
long long pow,n,q,i,j,x,y;
int a[100000];
int dp[17][100000];
int qu(int x, int y)
{
int pow=1,i=1;
while(pow*2<=y-x+1)
{
i++;
pow*=2;
}
if(pow==y-x+1)
return dp[i][x];
return min(dp[i][x], dp[i][y-pow+1]);
}
int main()
{
fin>>n>>q;
for(i=1;i<=n;i++)
{
fin>>a[i];
}
pow=1;
for(i=1;pow<=n;i++)
{
for(j=1;j<=n;j++)
{
if(i==1)
dp[i][j]=a[j];
else
{
if(j+pow/2<=n)
dp[i][j]=min(dp[i-1][j],dp[i-1][j+pow/2]);
else
dp[i][j]=dp[i-1][j];
}
}
pow*=2;
}
while(q)
{
fin>>x>>y;
fout<<qu(x,y)<<'\n';
q--;
}
return 0;
}