Pagini recente » Monitorul de evaluare | Cod sursa (job #2278005) | Cod sursa (job #971006) | Cod sursa (job #834046) | Cod sursa (job #3330552)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int N, M, a, mat[__lg(100000)+1][100001];
void solve()
{
vector<int> values(N+1);
fin >> N >> M;
values.push_back(0);
for (int i=1; i<=N; i++)
{
fin >> values[i];
}
for(int i=1; i<=N; i++)
{
mat[0][i]=values[i];
}
for (int k=1; (1<<k)<= N; ++k)
{
for (int i=1; i + (1<<k)-1 <=N; ++i)
{
int j = i + (1<<(k-1));
mat[k][i] = min(mat[k-1][i], mat[k-1][j]);
}
}
for (int it=1; it<=M; it++)
{
int x,y;
fin >> x >> y;
int k= __lg(y-x+1);
fout << min(mat[k][x],mat[k][y-(1<<k)+1]) << "\n";
}
}
int main()
{
solve();
return 0;
}