Pagini recente » Cod sursa (job #2840039) | Cod sursa (job #261593) | Cod sursa (job #1992772) | Cod sursa (job #2328997) | Cod sursa (job #1812045)
#include <iostream>
#include <fstream>
using namespace std;
int a[21][100005], n, m, lg[100005];
ifstream f("rmq.in");
void init()
{
f >> n >> m;
for(int i=1; i<=n; ++i)
{
f >> a[0][i];
}
lg[1]=0;
for(int i=2; i<=n; ++i)
lg[i]=lg[i/2]+1;
}
void rmq()
{
for(int i=1; i<=lg[n]; ++i)
{
for(int j=1; j<=n-(1<<i)+1; ++j)
{
a[i][j]=min(a[i-1][j],a[i-1][j+(1<<(i-1))]);
}
}
}
void out()
{
ofstream g("rmq.out"); int k;
for(int i=0, x, y; i<m; ++i)
{
f >> x >> y;
k=lg[y-x+1];
g << min(a[k][x], a[k][y-(1<<k)+1]) << '\n';
}
f.close();
g.close();
}
int main()
{
init();
rmq();
out();
return 0;
}