Cod sursa(job #2952095)

Utilizator vlad79xVlad79X vlad79x Data 8 decembrie 2022 11:36:20
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.41 kb
#include <bits/stdc++.h>
using namespace std;
const int nmax=1e5;
struct AINT {
        int aint[4*nmax+1];
        void update(int nod,int st,int dr,int poz,int val) {
                if(st==dr) {
                        aint[nod]=val;
                        return;
                }
                int mid=(st+dr)/2;
                if(poz<=mid)
                        update(2*nod,st,mid,poz,val);
                else
                        update(2*nod+1,mid+1,dr,poz,val);
                aint[nod]=max(aint[2*nod],aint[2*nod+1]);
        }
        int query(int nod,int st,int dr,int st1,int dr1) {
                if(st1<=st&&dr<=dr1)
                        return aint[nod];
                if(dr<st1||dr1<st)
                        return 0;
                int mid=(st+dr)/2;
                return max(query(2*nod,st,mid,st1,dr1),query(2*nod+1,mid+1,dr,st1,dr1));
        }
};
int main() {
        ifstream cin("arbint.in");
        ofstream cout("arbint.out");
        AINT aint;
        int n,q,x,y,t;
        cin>>n>>q;
        for(int i=1; i<=n; i++) {
                cin>>x;
                aint.update(1,1,n,i,x);
        }
        for(int i=1; i<=q; i++) {
                cin>>t>>x>>y;
                if(t==0)
                        cout<<aint.query(1,1,n,x,y)<<"\n";
                else
                        aint.update(1,1,n,x,y);
        }
        return 0;
}