Pagini recente » Cod sursa (job #2591899) | Cod sursa (job #1217226) | Cod sursa (job #1964824) | Cod sursa (job #1583955) | Cod sursa (job #2901907)
#include <fstream>
#include <vector>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int N, M, x, y, a[100001][20], putere[100001], l_interval, p;
int main()
{
f >> N >> M;
for(int i=0; i<N; i++)
f >> a[i][0];
for(int i=1; (1<<i) <=N; i++)
{
for(int j=0; j + (1<<i)-1 < N; ++j)
a[j][i] = min(a[j][i-1], a[j + (1<<(i-1))][i - 1]);
}
putere[1] = 0; //creez vectorul de suma de puteri ale lui 2
for(int i=2; i<=N; i++)
putere[i] = putere[i/2] + 1;
for(int i=1; i<=M; i++)
{
f >> x >> y;
x--; y--;
l_interval = y - (x-1);
p = putere[l_interval];
g << min(a[x][p], a[x + l_interval - (1<<p)][p]) << "\n";
}
}