Pagini recente » Cod sursa (job #2083242) | Cod sursa (job #3238244) | Cod sursa (job #128140) | Cod sursa (job #339624) | Cod sursa (job #2850632)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int st[100010][18];
int N, M;
void gen(int grad)
{
for(int i = 0; i + (1 << (grad - 1)) <= N - grad; i++)
st[i][grad] = min(st[i][grad - 1], st[i + (1 << grad - 1)][grad - 1]);
if(1 << ++grad <= N)
gen(grad);
}
int rmq(int l, int r)
{
int i = r - l, grad = 0;
while(i>>=1) grad++;
if(l + (1<<grad) - 1 == r)
return st[l][grad];
else
return min(st[l][grad], rmq(l + (1<<grad), r));
}
int main()
{
fin>>N>>M;
for(int i = 0; i < N; i++)
fin>>st[i][0];
gen(1);
int x, y;
for(int i = 0; i < M; i++)
{
fin>>x>>y;
x--;
y--;
fout<<rmq(x, y)<<"\n";
}
return 0;
}