Pagini recente » Cod sursa (job #2826631) | Cod sursa (job #668159) | Cod sursa (job #923853) | Cod sursa (job #363853) | Cod sursa (job #1588643)
#include <iostream>
#include <fstream>
#define nmax 100003
using namespace std;
int n, m, x, y;
int pow[nmax], rmq[17][nmax];
void generare_pow()
{
int k=1;
for(int i=1; i<nmax; i++)
{
if (i >= (1<<k)) k++;
pow[i] = k-1;
}
}
void generare_rmq()
{
for(int i=1; (1<<i)<=n; i++)
{
for(int j=1; j+(1<<i)-1<=n; j++)
{
rmq[i][j] = min(rmq[i-1][j], rmq[i-1][j+(1<<(i-1))]);
}
}
}
int querry(int x, int y)
{
int k = y - x +1;
k = pow[k];
return min(rmq[k][x], rmq[k][y-(1<<k)+1]);
}
int main()
{
ifstream f("rmq.in");
ofstream g("rmq.out");
f >> n >> m;
for(int i=1; i<=n; i++)
{
f >> rmq[0][i];
}
generare_pow();
generare_rmq();
for(int i=1; i<=m; i++)
{
f >> x >> y;
g << querry(x, y) << "\n";
}
f.close();
g.close();
return 0;
}