Cod sursa(job #2376590)

Utilizator trz59lollMurariu Iulian trz59loll Data 8 martie 2019 16:34:44
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.22 kb
#include <bits/stdc++.h>
#define mp make_pair
#define pb push_back
#define inf 2000001
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int v[1<<19],n,m;

inline void actualizare(int nod,int st,int dr,int pos,int val)
{
    if(st>=pos && dr<= pos)
    {
        v[nod] = val;
        return ;
    }

    int m = (st+dr)/2;
    if(pos<= m) actualizare(2*nod,st,m,pos,val);
    else actualizare(2*nod+1,m+1,dr,pos,val);
    if(v[2*nod]>v[2*nod+1])
        v[nod]=v[2*nod];
    else v[nod]=v[2*nod+1];

}

inline int interogare(int nod,int st,int dr, int a,int b)
{
    int v1=0,v2=0;
    if(st>=a&&dr<=b)
        return v[nod];
    int m = (st+dr)/2;
    if(a<=m)v1=interogare(2*nod,st,m,a,b);
    if(b>m)v2=interogare(2*nod+1,m+1,dr,a,b);
    if(v2>v1)v1=v2;
    return v1;
}
int main()
{
    int i,o,a,b;
    f>>n>>m;
    for(i=1;i<=n;i++)
    {
        f>>a;
        actualizare(1,1,n,i,a);
    }
    for(i=1;i<=m;i++)
    {
        f>>o>>a>>b;
        switch(o)
        {
            case 1:
                actualizare(1,1,n,a,b);
                break;

            case 0:
                g<<interogare(1,1,n,a,b)<<'\n';
                break;
        }

    }
}