Cod sursa(job #1128645)

Utilizator UngureanuRobertUngureanu Robert Mihail UngureanuRobert Data 27 februarie 2014 18:01:03
Problema Arbori de intervale Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.31 kb
#include <fstream>
 
using namespace std;
 
    FILE *f = fopen("arbint.in","r");
    FILE *g = fopen("arbint.out","w");
 
    long long arb[1<<19],n,m,i,x,y,z,maxim;
 
    void query(long nod,long st,long dr,long long a,long long b){
        if(a<=st && dr<=b){
            if(maxim<=arb[nod])
                maxim=arb[nod];
                return ;
            }
 
            long long mij=(st+dr)/2;
            if(a<=mij) query(2*nod,st,mij,a,b);
            if(b>=mij+1) query(2*nod+1,mij+1,dr,a,b);
 
    }
 
    void update(long long nod,long long st,long long dr,long long poz,long long val){
        if(st==dr){
            arb[nod]=val;
            return ;
            }
 
                long long mij=(st+dr)/2;
                if(poz<=mij) update(2*nod,st,mij,poz,val);
                else update(2*nod+1,mij+1,dr,poz,val);
 
        arb[nod]=max(arb[2*nod],arb[2*nod+1]);
    }
 
 
 
int main()
{
    fscanf(f,"%lld %lld", &n,&m);
    for(i=1;i<=n;i++){
        fscanf(f,"%lld", &x);
        update(1,1,n,i,x);
    }
    for(i=1;i<=m;i++){
        fscanf(f,"%lld %lld %lld", &x,&y,&z);
        if(x==0){
		maxim=0;
                query(1,1,n,y,z);
                fprintf(g,"%lld\n",maxim);
        }
 
        else
            update(1,1,n,y,z);
    }
 
    return 0;
}