Pagini recente » Cod sursa (job #1870812) | Cod sursa (job #1577802) | Cod sursa (job #1837450) | Cod sursa (job #383968) | Cod sursa (job #2615469)
#include <iostream>
#include <fstream>
#include <cmath>
#define N 100005
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int n, m, i, p, j, m1, m2, lungime, v[N], a[N][20], p2[20];
void putere()
{
p2[0] = 1;
for(int i = 1; i <= 20; i ++)
p2[i] = 2 * p2[i - 1];
}
int main()
{
putere();
f >> n >> m;
for(i = 1; i <= n; i ++)
{
f >> v[i];
a[i][0] = i;
}
p = 1;
j = 1;
while(j <= log2(n))
{
for(i = 1;i<= n; i ++)
{
if(v[a[i][j - 1]] < v[a[i + p][j - 1]])
a[i][j] = a[i][j - 1];
else
a[i][j] = a[i + p][j - 1];
}
p = p * 2;
++j;
}
for(i = 1; i <= m; i ++)
{
f >> m1 >> m2;
lungime = m2 - m1 + 1;
int lg = log2(lungime);
if(v[a[m1][lg]] < v[a[m1 + lungime - p2[lg]][lg]])
g << v[a[m1][lg]] << "\n";
else
g << v[a[m1 + lungime - p2[lg]][lg]] << "\n";
}
return 0;
}