Pagini recente » Cod sursa (job #2438172) | Cod sursa (job #2342504) | Cod sursa (job #2663095) | Cod sursa (job #464382) | Cod sursa (job #3203542)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int n, m;
vector<int> a;
vector<int> lg;
int sp[20][100000];
void Constr()
{
for(int i = 0; i < n; i++)
sp[0][i] = a[i];
int crt = lg[n];
for(int i = 1; i <= crt; i++)
{
for(int j = 0; j+(1<<i)-1 < n; j++)
{
int aj = (1<<(i-1));
sp[i][j] = min(sp[i-1][j], sp[i-1][j + aj]);
}
}
}
int main()
{
fin >> n >> m;
a.resize(n);
lg.resize(n+1);
for(int i = 0; i < n; i++)
fin >> a[i];
for(int i = 2; i <= n; i++)
lg[i] = 1 + lg[i/2];
Constr();
for(int i = 0; i < m; i++)
{
int x, y;
fin >> x >> y;
x--;
y--;
int len = y-x+1;
int p = lg[len];
fout << min(sp[p][x], sp[p][y-(1<<p)+1]) << "\n";
}
return 0;
}