Pagini recente » Cod sursa (job #291539) | Cod sursa (job #2123014) | Cod sursa (job #3226039) | Cod sursa (job #2904205) | Cod sursa (job #1799645)
#include <bits/stdc++.h>
#define ll long long
#define maxn 200005
#define rc(s) return cout << s,0
#define _ ios_base::sync_with_stdio(false);cin.tie(0);
#define mp make_pair
#define pii pair<int,int>
#define vi vector<int>
#define vll vector<long long>
#define cin fin
#define cout fout
using namespace std;
const int inf = INT_MAX;
int n,m,val,pos,x,y,z,start,finish;
int aint[420420];
void upd(int nod,int l, int r, int val)
{
if(l == r)
{
aint[nod] = val;
return;
}
int mid = (l+r)/2;
if(pos<=mid) upd(nod*2,l,mid,val);
else upd(nod*2+1,mid+1,r,val);
aint[nod] = min(aint[nod*2],aint[nod*2+1]);
}
int qry(int nod,int l,int r)
{
if(start <= l && finish >= r)
return aint[nod];
if(start > r || finish < l)
return inf;
return min(qry(nod*2,l,(l+r)/2),qry(nod*2+1,(l+r)/2+1,r));
}
int main(){
ifstream fin("rmq.in");
ofstream fout("rmq.out");
memset(aint,inf,sizeof(aint));
cin >> n >> m;
for(int i = 1;i<=n;i++)
{
cin >> x;
pos = i;
upd(1,1,n,x);
}
for(int i = 1;i<=m;i++)
{
cin >> x >> y;
start = x;
finish = y;
cout << qry(1,1,n) << '\n';
}
return 0;
}