Cod sursa(job #2168357)

Utilizator filip.mihalutMihalut Filip filip.mihalut Data 14 martie 2018 10:34:14
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 kb
#include <bits/stdc++.h>
#define Nmax 100004

using namespace std;

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

int heap[Nmax*4],Max,n,t,i,x,a,b;

inline void insertHeap(int st,int dr,int nod,int val,int poz)
{
    if(st == dr)
    {
        heap[nod] = val;
        return;
    }

    int mij = (st + dr) / 2;
    if(poz <= mij)
        insertHeap(st,mij,2*nod,val,poz);
    else insertHeap(mij + 1,dr,2*nod + 1,val,poz);

    heap[nod] = max(heap[2*nod] , heap[2*nod + 1]);
}

void query(int st,int dr,int nod,int a,int b)
{
    if(a <= st && dr <= b)
    {
        Max = max(Max,heap[nod]);
        return;
    }

    int mij = (st + dr) / 2;
    if(mij >= a)
        query(st,mij,2*nod,a,b);
    if(mij + 1 <= b)
        query(mij + 1,dr,2*nod + 1,a,b);
}

int main()
{
    f >> n >> t;
    for(i = 1;i <= n;i++)
        f >> x,insertHeap(1,n,1,x,i);

    for(i = 1;i <= t;i++)
    {
        f >> x >> a >> b;
        switch(x)
        {
        case 1:
            insertHeap(1,n,1,b,a);
            break;
        case 0:
            Max = -1;
            query(1,n,1,a,b);
            g << Max << '\n';
            break;
        }
    }
    return 0;
}