Pagini recente » Cod sursa (job #2822080) | Cod sursa (job #419850) | Cod sursa (job #1580831) | Cod sursa (job #2543285) | Cod sursa (job #2812983)
#include <fstream>
#define nmax 100005
#define matmax 18
using namespace std;
ifstream in("rmq.in");
ofstream out("rmq.out");
int lg[nmax], v[nmax], doi[nmax];
int d[matmax][nmax];
int n, m, a, b;
int main()
{
doi[0] = 1;
for(int i=1; i<matmax; i++)
{
doi[i] = 2 * doi[i-1];
}
in>>n>>m;
for(int i=2; i<=n; i++)
{
lg[i] = lg[i/2] + 1;
}
for(int i=1; i<=n; i++)
{
in>>v[i];
d[0][i] = v[i];
}
for(int i=1; i<matmax; i++)
{
for(int j=1; j<= n -doi[i] + 1; j++)
{
d[i][j] = min(d[i-1][j], d[i-1][j+doi[i-1]]);
}
}
for(int i=1; i<=m; i++)
{
in>>a>>b;
out<< min(d[lg[b-a +1 ]][a + (b - a+1 - doi[lg[b-a + 1]])], d[lg[b-a+1]][a] )<<"\n";
}
return 0;
}