Cod sursa(job #1012754)

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

const int MAX_N = 100002;

int N, M, x, y;
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 int query(int node, int left, int right) {
    int ans = 0;
    if(x <= left && right <= y)
        ans = A[node];
    else {
        int m = (left+right)/2;
        if(x <= m)
            ans = query(2*node, left, m);
        if(y > m)
            ans = max(ans,  query(2*node + 1, m+1, right));
    }

    return ans;
}

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

    f >> N >> M;
    for(int i = 1, value; 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)
           g << query(1, 1, N) << "\n";
        else update(1, 1, N);
    }

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

    return 0;
}