Pagini recente » Cod sursa (job #1662683) | Cod sursa (job #2430330) | Cod sursa (job #166975) | Cod sursa (job #109708) | Cod sursa (job #1915734)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
const int oo = 0x3f3f3f3f;
int n, m, ai[400066], x, y, st, dr, N, poz;
void Update_tree(int l, int d, int nod, int val)
{
if(l == d)
{
ai[nod] = x;
return;
}
int mi = (l+d)/2;
if(poz <= mi) Update_tree(l, mi, nod*2, val);
else Update_tree(mi+1, d, nod*2+1, val);
ai[nod] = min(ai[nod*2], ai[nod*2+1]);
}
int Query(int l, int d, int nod)
{
if(st<=l && d<=dr)
return ai[nod];
if(d<st || l > dr)
return oo;
int mi = (l+d)/2;
return min(Query(l, mi, nod*2), Query(mi+1, d, nod*2+1));
}
int main()
{
fin >> n >> m;
for(N=1; N<=n; N<<=1);
for(int i=1; i<=N*2+5; i++) ai[i] = oo;
for(int i=1; i<=n; i++)
{
fin >> x;
poz = i;
Update_tree(1, N, 1, x);
// fout<<"poz "<<i<<": ";
// for(int i=1; i<=N*2-1; i++) fout<<ai[i]<<' ';
// fout<<'\n';
}
for(int i=1; i<=m; i++)
{
fin >> st >> dr;
fout << Query(1, N, 1)<< '\n';
}
return 0;
}