Cod sursa(job #1043177)

Utilizator vlad_beluVlad Belu vlad_belu Data 28 noiembrie 2013 08:49:03
Problema Arbori de intervale Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include <iostream>
#include <fstream>
using namespace std;
int n,m,i;
int v[4*100001];

void up(int poz,int a,int b,int st,int dr);
//int que(int a,int b);

int main(){
    ifstream f("arbint.in");
    ofstream g("arbint.out");
    f>>n>>m;
    int a,b,j,k=0,s=2; bool x;
    while(s<n) s*=2;
    for(i=1;i<=n;i++){
      f>>b;
      cout<<b<<" ";
      up(1,i,b,1,s);
    }
    cout<<endl;
   // for(i=n+1;i<=s;i++) up(1,i,0,1,n);
   // cout<<endl<<"S="<<s<<endl;
for(i=1;i<=2*s-1;i++)
    cout<<v[i]<<" ";


    for(i=1;i<=m;i++){
        f>>x>>a>>b;
        if(x){
            up(1,a,b,1,s);
        }
        else{
            k=v[s+a-1];

            for(j=s+a;j<=s-1+b;j++)
                if(k<v[j])k=v[j];
            g<<k<<endl;
        }
    }

f.close();g.close();
return 0;
}

void up(int poz, int a,int b,int st,int dr){
    if(st==dr){
        v[poz]=b;
        return;}
    if(b>v[poz]) v[poz]=b;
    int mij=(st+dr)/2;
    if(a<=mij) up(2*poz,a,b,st,mij);
    else up(2*poz+1,a,b,mij+1,dr);

}