Cod sursa(job #1721640)

Utilizator Vladi.BarasBaras Nicholas Vladimir Laurentiu Vladi.Baras Data 26 iunie 2016 10:22:48
Problema Arbori de intervale Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include <fstream>

using namespace std;
int v[200001];
int arb[200001];
ifstream cin("arbint.in");
ofstream cout("arbint.out");
void act(int arb[],int st,int dr,int pos,int nod) {
    if(dr-st==0) {
        if(st==pos)arb[nod]=v[pos];
    } else if(st<=pos&&pos<=dr) {

        int m=(st+dr)/2;
        act(arb,st,m,pos,2*nod);
        act(arb,m+1,dr,pos,2*nod+1);
        if(arb[2*nod]>arb[2*nod+1])
            arb[nod]=arb[2*nod];
        else
            arb[nod]=arb[2*nod+1];

    }
}
int inter(int arb[],int st,int dr,int nod,int a, int b)
{
if(b<st||dr<a)return -1;
if(a<=st&&dr<=b)
return arb[nod];
else
{int m=(st+dr)/2;

int m1 = inter(arb,st,m,2*nod,a,b);

int m2 = inter(arb,m+1,dr,2*nod+1,a,b);

if(m1>m2)return m1;
else
return m2;
}
}
int main() {
    int n,m,x,y,z;
    cin>>n>>m;
    for(int i=1; i<=n; i++) {
        cin>>v[i];
        act(arb,1,n,i,1);
    }
    for(int i=1; i<=m; i++) {
        cin>>x>>y>>z;
        if(x==0) {
            cout<<inter(arb,1,n,1,y,z)<<endl;
        }
         else {
            v[y]=z;
            act(arb,1,n,y,1);
        }
    }


    return 0;
}