Pagini recente » Cod sursa (job #1855439) | Cod sursa (job #170888) | Cod sursa (job #2030867) | Cod sursa (job #2917097) | Cod sursa (job #2812981)
#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<< d[lg[b-a +1 ]][a + (b - a+1 - doi[lg[b-a + 1]])]<<"\n";
}
return 0;
}