Cod sursa(job #1941982)

Utilizator andrei.sasaAndrei SaSa andrei.sasa Data 27 martie 2017 18:43:46
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include <iostream>
#include <fstream>
#define maxn 100005

using namespace std;

ifstream f("arbint.in");
ofstream g("arbint.out");

int n, m, arb[maxn << 2];

void update(int nod, int st, int dr, int x, int val)
{
    if(st==dr)
    {
        arb[nod]=val;
        return;
    }
    int mid=(st+dr)/2;
    if(x<=mid) update(nod*2,st,mid,x,val);
    else update(nod*2+1,mid+1,dr,x,val);
    arb[nod]=max(arb[nod*2],arb[nod*2+1]);
}

int querry(int nod, int st, int dr, int a, int b)
{
    if(a<=st && dr<=b) return arb[nod];
    int mid=(st+dr)/2, maxim=-0x3f3f3f3f;
    if(a<=mid) maxim=querry(nod*2,st,mid,a,b);
    if(b>mid) maxim=max(maxim,querry(nod*2+1,mid+1,dr,a,b));
    return maxim;
}

int main()
{
    f>>n>>m;
    for(int i=1;i<=n;i++)
    {
        int x;
        f>>x;
        update(1,1,n,i,x);
    }
    for(int i=1;i<=m;i++)
    {
        int a,b,c;
        f>>a>>b>>c;
        if(a==0) g<<querry(1,1,n,b,c)<<'\n';
        else update(1,1,n,b,c);
    }
    f.close();
    g.close();
    return 0;
}