Cod sursa(job #2122467)

Utilizator DavidDragulinDragulin David DavidDragulin Data 5 februarie 2018 10:04:10
Problema Arbori de intervale Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int n,m,v[100009],aint[200009],i,p,x,y;
void build()
{
    int i;
    for(i=1;i<=n;i++)
        aint[n+i-1]=v[i];
}
void update(int p,int x)
{
    aint[p+n-1]=x;
    int i;
    for(i=(p+n-1)/2;i>0;i>>=1)
        aint[i]=max(aint[i<<1],aint[1<<1|1]);
}
int query(int a,int b)
{
    int answer=0;
    a+=n-1;
    b+=n;
    for(;a<b;a>>1,b>>1)
    {
        if(a&1)
            answer=max(answer,aint[a++]);
        if(b&1)
            answer=max(answer,aint[--b]);
    }
    return answer;
}
int main()
{
    fin>>n>>m;
    for(i=1;i<=n;i++)
        fin>>v[i];
    build();
    for(i=1;i<=m;i++)
    {
        fin>>p;
        if(p==1)
        {
            fin>>x>>y;
            update(x,y);
        }
        else
        {
            fin>>x>>y;
            int ans=query(x,y);
            fout<<ans<<endl;
        }
    }
    return 0;
}