Cod sursa(job #1147731)

Utilizator DanutsDanut Rusu Danuts Data 20 martie 2014 08:47:13
Problema Arbori de intervale Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.33 kb
#include <iostream>
#include <fstream>
#include<algorithm>
#include<math.h>
#define maxn 100010
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int n,x,m;
long long int v[maxn];
int y,cod,l,r,poz;
long long int maxx;
void update(int i,int st,int dr){
    if(st!=dr){
        int m=(st+dr)/2;
        if(poz<=m)
            update(2*i,st,m);
        else
            update(2*i+1,m+1,dr);
        v[i]=max(v[2*i],v[2*i+1]);
    }
    else
        v[i]=x;
}
void maxi(int i,int st,int dr){
    if(st>=l && r>=dr)
        maxx=max((long long int )maxx,v[i]);
    else{
        int m=(st+dr)/2;
        if(r<=m)
            maxi(2*i,st,m);
        else
            if(l>m)
                maxi(2*i+1,m+1,dr);
            else{
                maxi(2*i,st,m);
                maxi(2*i+1,m+1,dr);
            }
    }
}
int main()
{
    f>>n>>m;
    for(int i=1;i<=n;i++){
        f>>x;
        poz=i;
        update(1,1,n);
    }
    for(int i=1;i<=m;i++){
            f>>cod>>x>>y;
            if(cod==1){
                poz=x;
                x=y;
                update(1,1,n);
            }
            else{
                maxx=-1;
                l=x;
                r=y;
                maxi(1,1,n);
                g<<maxx<<'\n';
            }
    }
    return 0;
}