Cod sursa(job #2095237)

Utilizator DenisONIcBanu Denis Andrei DenisONIc Data 27 decembrie 2017 11:51:53
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.76 kb
#include <bits/stdc++.h>
#define Nmax 131073
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int A[2*Nmax],n,m,N=1;
void build(){
    for(int i=N-1;i>=1;i--) A[i]=max(A[i<<1],A[i<<1|1]);
}
void modify(int p,int val){
    for(A[p+=N-1]=val;p>1;p>>=1) A[p>>1]=max(A[p],A[p^1]);
}
int query(int l,int r){
    int res=0;
    for(l+=N-1,r+=N;l<r;l>>=1,r>>=1){
        if(l&1) res=max(res,A[l++]);
        if(r&1) res=max(res,A[--r]);
    }
    return res;
}
int main()
{
    f>>n>>m;
    while(N<n) N<<=1;
    for (int i=1;i<=n;i++)
        f>>A[N+i-1];
    build();
    int t,p,val;
    for (int i=1;i<=m;i++){
        f>>t>>p>>val;
        if (t==0) g<<query(p,val)<<'\n';
        else modify(p,val);
    }
    return 0;
}