Cod sursa(job #3259456)

Utilizator VladStroicaStroica Vlad Cristian VladStroica Data 26 noiembrie 2024 12:55:50
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.25 kb
#include <bits/stdc++.h>
#define int long long
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int s[100000001];
int v[100000001];
void upd(int node,int from,int to,int pos,int val)
{
    if(from==to)
    {
        s[node]=val;
        return;
    }
    int mid=from+to;
    mid=mid/2;
    if(pos<=mid)
    {
        upd(node*2,from,mid,pos,val);
    }
    else
        upd(node*2+1,mid+1,to,pos,val);
    s[node]=max(s[node*2],s[node*2+1]);
}
int query(int node,int from,int to,int qleft,int qright)
{
    int smax=0;
    if(qleft > to || qright < from)
        return 0;
    if(qleft<=from && to<=qright)
        return s[node];
    int mid=(to+from)/2;
       int s=query(node*2,from,mid,qleft,qright);
       smax=max(s,smax);
    s=query(node*2+1,mid+1,to,qleft,qright);
        smax=max(s,smax);
    return smax;

}
signed  main()
{
    int n,m;
    int a,b,c;
    fin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        fin>>v[i];
        upd(1,1,n,i,v[i]);
    }
    for(int i=1;i<=m;i++)
    {
        fin>>a>>b>>c;
        if(a==1)
        {
            upd(1,1,n,b,c);
        }
        else if(a==0)
        {
            fout<<query(1,1,n,b,c)<<endl;
        }
    }

    return 0;
}