Cod sursa(job #2600081)

Utilizator betybety bety bety Data 11 aprilie 2020 22:25:53
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.81 kb
#include <fstream>
#include <climits>
using namespace std;
ifstream cin("arbint.in");
ofstream cout("arbint.out");
int n,m,x;
///1e5+3
const int lim=131072;
int tree[2*lim+10];
void add(int k,int x)
{
    k+=lim;
    tree[k]=x;
    for(k/=2;k>=1;k/=2)
        tree[k]=max(tree[2*k],tree[2*k+1]);
}
int maxim(int l,int r)
{
    int rasp=INT_MIN;
    l+=lim;
    r+=lim;
    while(l<=r)
    {
        if(l%2==1) rasp=max(rasp,tree[l++]);
        if(r%2==0) rasp=max(rasp,tree[r--]);
        l/=2; r/=2;
    }
    return rasp;
}
int main()
{
    cin>>n>>m;
    for(int i=1;i<=n;++i)
        cin>>x,add(i,x);
    for(int i=1;i<=m;++i)
    {
        bool tip;
        int a,b;
        cin>>tip>>a>>b;
        if(tip==0) cout<<maxim(a,b)<<'\n';
        else add(a,b);
    }
    return 0;
}