Cod sursa(job #2601847)

Utilizator betybety bety bety Data 15 aprilie 2020 12:20:15
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.79 kb
#include <fstream>
#include <climits>
using namespace std;
ifstream cin("rmq.in");
ofstream cout("rmq.out");
const int lim=128024;
int tree[2*lim+5];
void add(int k,int x)
{
    k+=lim;
    tree[k]=x;
    for(k/=2;k>=1;k/=2)
        tree[k]=min(tree[2*k],tree[2*k+1]);
}
int minim(int l,int r)
{
    int answer=INT_MAX;
    l+=lim;
    r+=lim;
    while(l<=r)
    {
        if(l%2==1) answer=min(answer,tree[l++]);
        if(r%2==0) answer=min(answer,tree[r--]);
        l/=2; r/=2;
    }
    return answer;
}
int main()
{
    int n,m,a,l,r;
    cin>>n>>m;
    for(int i=1;i<=2*lim;++i)
        tree[i]=INT_MAX;
    for(int i=1;i<=n;++i)
        cin>>a,add(i,a);
    for(int i=1;i<=m;++i)
    {
        cin>>l>>r;
        cout<<minim(l,r)<<'\n';
    }
    return 0;
}