Cod sursa(job #2089768)

Utilizator bleo16783FMI Bleotiu Cristian bleo16783 Data 17 decembrie 2017 03:27:27
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include <fstream>
using namespace std;
#define N 100100
int v[2*N],i,n,j,m,x,y,t;
inline int operatie(int a,int b)
{
    if(a>b)return a;
    return b;
}
inline void build()
{
    for(i=n-1;i>0;--i)
        v[i]=operatie(v[i<<1],v[i<<1|1]);
}
inline void update(int p,int x)
{
    v[p+n]=x;
    for(p=(p+n)>>1;p>0;p>>=1)
        v[p]=operatie(v[p<<1],v[p<<1|1]);
}
inline int query(int l,int r)
{
    int ans=0;
    for(l+=n,r+=n;l<r;l>>=1,r>>=1)
    {
        if(l&1)ans=operatie(ans,v[l++]);
        if(r&1)ans=operatie(ans,v[--r]);
    }
    return ans;
}
int main()
{
    ifstream fin("arbint.in");
    ofstream fout("arbint.out");
    fin>>n>>m;
    for(i=0;i<n;++i)fin>>v[i+n];
    build();
    for(i=0;i<m;++i)
    {
        fin>>t>>x>>y;
        if(!t)fout<<query(x-1,y)<<'\n';
        else update(x-1,y);
    }
    return 0;
}