Cod sursa(job #2112249)

Utilizator Valentin0709Datcu George Valentin Valentin0709 Data 23 ianuarie 2018 11:38:36
Problema Arbori de intervale Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include<algorithm>
#include<stdio.h>
using namespace std;

FILE*f=fopen("arbint.in","r");
FILE*g=fopen("arbint.out","w");

int v[100],t[200],n,m,i,p,x,y;

void adaug(int nod, int a, int b, int p) {
    int mij=(a+b)/2;
    if(a==b) t[nod]=v[p];
    else {
        if(p<=mij) adaug(2*nod,a,mij,p);
        else adaug(2*nod+1,mij+1,b,p);
        t[nod]=max(t[2*nod],t[2*nod+1]);
    }
}

int interog(int nod, int a, int b, int st, int dr) {
    int mij=(a+b)/2,k=0;
    if(st<=a&&b<=dr) return t[nod];
    else {
        if(dr>mij) k=interog(2*nod+1,mij+1,b,st,dr);
        if(st<=mij) k=max(k,interog(2*nod,a,mij,st,dr));
        return k;
    }
}

int main() {

    fscanf(f,"%d%d",&n,&m);
    for(i=1;i<=n;i++) fscanf(f,"%d",&v[i]);
    for(i=1;i<=n;i++) adaug(1,1,n,i);

    for(i=1;i<=m;i++) {
        fscanf(f,"%d%d%d",&p,&x,&y);
        if(p==0) fprintf(g,"%d\n",interog(1,1,n,x,y));
        else {v[x]=y; adaug(1,1,n,x);}
    }

    fclose(f); fclose(g);

    return 0;
}