Cod sursa(job #2628494)

Utilizator betybety bety bety Data 16 iunie 2020 10:31:14
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.86 kb
#include <fstream>
using namespace std;
ifstream cin("arbint.in");
ofstream cout("arbint.out");
const int lim=100000;
int tree[2*lim+3];
void add(int k,int x)
{
    k+=lim;
    tree[k]=x;
    for(k/=2;k>0;k/=2)
        tree[k]=max(tree[2*k],tree[2*k+1]);
}
int maxim(int l,int r)
{
    l+=lim;
    r+=lim;
    int ans=tree[l];
    while(l<=r)
    {
        if(l%2==1) ans=max(ans,tree[l++]);
        if(r%2==0) ans=max(ans,tree[r--]);
        l/=2; r/=2;
    }
    return ans;
}
int main()
{
    int n,q,tip,x,y;
    cin>>n>>q;
    for(int i=1;i<=n;++i)
    {
        cin>>x;
        tree[i+lim]=x;
    }
    for(int i=lim;i>0;--i)
        tree[i]=max(tree[2*i],tree[2*i+1]);
    for(int i=1;i<=q;++i)
    {
        cin>>tip>>x>>y;
        if(tip==0)
            cout<<maxim(x,y)<<'\n';
        else add(x,y);
    }
    return 0;
}