Pagini recente » Cod sursa (job #159854) | Cod sursa (job #1218233) | Cod sursa (job #1106603) | Cod sursa (job #1628387) | Cod sursa (job #1560874)
#include <iostream>
#include <fstream>
using namespace std;
int i,j, rmq[18][100001], a[100001],n,m,x,y;
ifstream f("rmq.in");
ofstream g("rmq.out");
int biggestpower(int b)
{
int p=1;
int k=0;
while (2*p<=b)
{
p=p*2;
k++;
}
return k;
}
int topower(int b, int power)
{
if (power==0) return 1;
for (int l=1;l<power;l++)
b=b*2;
return b;
}
void precalculations()
{
int maxpower=biggestpower(n);
for (i=1;i<=maxpower;i++)
for (j=1;j<=n-topower(2,i)+1;j++)
rmq[i][j] = min( rmq[i-1][j] , rmq[i-1][j+topower(2,i-1)]);
}
void solve()
{
for (i=1;i<=m;i++)
{
f>>x>>y;
int maxpower=biggestpower(y-x);
int sol=min(rmq[maxpower][x] , rmq[maxpower][y-topower(2,maxpower)+1]);
g<<sol<<'\n';
}
}
int main()
{
f>>n>>m;
for (i=1;i<=n;i++)
f>>a[i];
for (i=1;i<=n;i++)
rmq[0][i]=a[i];
precalculations();
solve();
return 0;
}