Pagini recente » Cod sursa (job #647398) | Cod sursa (job #2399018) | Cod sursa (job #2695474) | Cod sursa (job #1995364) | Cod sursa (job #2173960)
#include <iostream>
#include <fstream>
#include <climits>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int seg[300000];
int a[100002];
int n, m;
void constr_segtree(int st, int dr, int pos)
{
if(st==dr)
{
seg[pos]=a[st];
return;
}
int mid=(st+dr)/2;
constr_segtree(st, mid, 2*pos+1);
constr_segtree(mid+1, dr, 2*pos+2);
seg[pos]=min(seg[2*pos+1], seg[2*pos+2]);
}
int query(int qst, int qdr, int st, int dr, int pos=0)
{
if(qst<=st && dr<=qdr)
{
return seg[pos];
}
else if(st>qdr || dr<qst)
{
return INT_MAX;
}
else
{
int minval;
int minst, mindr;
int mid=(st+dr)/2;
minst=query(qst, qdr, st, mid, 2*pos+1);
mindr=query(qst, qdr, mid+1, dr, 2*pos+2);
return min(minst, mindr);
}
}
int main()
{
fin >> n >> m;
for(int i=0; i<n; i++)
fin >> a[i];
constr_segtree(0, n-1, 0);
for(int i=0; i<m; i++)
{
int st, dr;
fin >> st >> dr;
fout << query(st-1, dr-1, 0, n-1) << '\n';
}
return 0;
}