Pagini recente » Cod sursa (job #2896001) | Cod sursa (job #2326651) | Cod sursa (job #2147023) | Cod sursa (job #872474) | Cod sursa (job #2242686)
#include <iostream>
#include<fstream>
#include<cmath>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int N, M, m[100001][17];
int putere(int a, int p)
{
int x = 1;
while(p > 0)
if(p % 2 == 0)
{
a = (long long)a * a;
p /= 2;
}
else
{
x = (long long)x * a;
p--;
}
return x;
}
int main()
{ int x,y;
f >> N >> M;
for(int i = 1; i <= N; i++)
f>>m[i][0];
for(int j = 1; putere(2, j) <= N; j++)
for(int i = 1; i + putere(2, j) - 1<=N; i++)
if(m[i][j - 1] < m[i + putere(2, j - 1)][j - 1])
m[i][j] = m[i][j - 1];
else
m[i][j] = m[i + putere(2, j - 1)][j - 1];
for(int i=0;i<M;i++)
{
f>>x>>y;
int t=log2(y-x+1);
g<<min(m[x][t],m[y-putere(2,t)+1][t])<<'\n';
}
return 0;
}