Cod sursa(job #1012756)

Utilizator Mihai22eMihai Ionut Enache Mihai22e Data 19 octombrie 2013 16:36:41
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include <fstream>
using namespace std;

const int MAX_N = 100002;

int N, M, x, y, ans;
int A[7*MAX_N];

inline void update(int node, int left, int right) {
    if(left == right)
        A[node] = y;
    else {
        int m = (left+right)/2;
        if(x <= m)
            update(2*node, left, m);
        else update(2*node + 1, m+1, right);
        A[node] = max(A[2*node], A[2*node + 1]);
    }
}

inline void query(int node, int left, int right) {
    if(x <= left && right <= y)
        ans = max(ans, A[node]);
    else {
        int m = (left+right)/2;
        if(x <= m)
            query(2*node, left, m);
        if(y > m)
            query(2*node + 1, m+1, right);
    }
}

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

    f >> N >> M;
    for(int i = 1; i <= N; ++i) {
        f >> y;
        x = i;
        update(1, 1, N);
    }

    for(int i = 1; i <= M; ++i) {
        int t;
        f >> t >> x >> y;
        if(t == 0) {
            ans = 0;
            query(1, 1, N);
            g << ans << "\n";
        }
        else update(1, 1, N);
    }

    f.close();
    g.close();

    return 0;
}