Cod sursa(job #1409255)

Utilizator StarGold2Emanuel Nrx StarGold2 Data 30 martie 2015 14:19:35
Problema Trapez Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.81 kb
#include <fstream>
using namespace std;

ifstream fin ("date.in" );
ofstream fout("date.out");

int N, M, i, j, K, ok, k, pos, Q;
int V[DIM], Arb[DIM];

void SetUp(){
    fin >> N >> Q;
    for(i = 1; i <= N; i ++)
        fin >> V[i];
    return;
}

int MAX(int a, int b){
    if(a >= b) return a;
    if(a <= b) return b;
}

void Shift(int c){
    int p = c / 2;
    while(p != 0){
        if(Arb[p] < Arb[c]){
            Arb[p] = Arb[c];
            c = p;
            p /= 2;
        }
        else
            break;
    }
    return;
}

void BuildArb(int st, int dr, int pos){
    if(st == dr){
        Arb[pos] = V[st];
    }
    else{
        int mid = st + (dr - st) / 2;
        BuildArb(st, mid, pos*2);
        BuildArb(mid+1, dr, pos*2+1);
        Arb[pos] = MAX(Arb[pos*2], Arb[pos*2+1]);
    }
    return;
}

void Find(int st, int dr, int pos){
    if(st == dr){
        Arb[pos] = b;
        Shift(pos);
    }
    else{
        int mid = st + (dr - st) / 2;
        if(a <= mid)
            Find(st, mid, pos*2);
        else
            Find(mid+1, dr, pos*2+1);
    }
    return;
}

void GetMax(int st, int dr, int pos){
    if(st == dr){
        if(maxim < Arb[pos])
            maxim = Arb[pos];
    }
    else{
        if(a >= st && b <= mid)
            Arb(st, mid, pos*2)

    }
    return;
}

void Cerinta_1(){
    maxim = 0;
    GetMax(1, N, 1);
    return;
}

void Cerinta_2(){
    Find(1, N, 1);
    return;
}

void CodeExpert(){
    for(k = 1; k <= Q; k ++){
        fin >> cod >> a >> b;
        switch(cod)
        {
            case 0:{Cerinta_1(); break;}
            case 1:{Cerinta_2(); break;}
        }

    }
    return;
}

int main(){
    SetUp();
    BuildArb(1, N, 1);
    CodeExpert();
    return 0;
}