Cod sursa(job #1956298)

Utilizator radu.leonardoThe Doctor radu.leonardo Data 6 aprilie 2017 17:16:19
Problema Arbori de intervale Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.23 kb
#include <bits/stdc++.h>

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

int N,M;

class SegmentTree
{
public:

    void resize(int x)
    {
        size=x;
        tree=new int[size<<2];
    }
    void update(int where, const int value)
    {
        tree[where += size] = value;
        for (where /= 2; where > 0; where /= 2)
        {
            tree[where] = max(tree[2 * where], tree[2 * where + 1]);
        }
    }

    int query(int from, int to) const
    {
        int value = -0x3f3f3f3f;
        from += size;
        to += size;
        while (from <= to)
        {
            value = max(value, max(tree[from], tree[to]));
            from = (from + 1) / 2;
            to = (to - 1) / 2;
        }
        return value;
    }

private:
    int size;
    int *tree;
};


int main()
{
    f>>N>>M;
    SegmentTree mySegmentTree;
    mySegmentTree.resize(N);

    for(int i=1; i<=N; i++)
    {
        int x;
        f>>x;
        mySegmentTree.update(i-1,x);
    }

    for(int i=1; i<=N; i++)
    {
        int t,x,y;
        f>>t>>x>>y;
        if(t==0)  g<<mySegmentTree.query(x-1,y-1)<<'\n';
        else mySegmentTree.update(x-1,y);
    }

}