Cod sursa(job #2109987)

Utilizator nerelog25Radu Andrei Stefan nerelog25 Data 20 ianuarie 2018 11:56:20
Problema Arbori de intervale Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream F("arbint.in");
ofstream g("arbint.out");
int v[100000],n,m,x,pos,val,s,f,mx;

int maxi(int a,int b)
{
    if(a>b) return a;
    else return b;
}
void update(int nod,int l,int r)
{
    int m;
    if(l==r)  v[nod]=val;
    else
    {
    m=(l+r)/2;
    if(pos<=m) update(2*nod,l,m);
    else update(2*nod+1,m+1,r);
    v[nod]=maxi(v[2*nod],v[2*nod+1]);
    }
}
int queery(int nod,int l,int r)
{
    int m,x1=0,x2=0;
    if(s<=l && r<=f) return v[nod];
    else
    {

    m=(l+r)/2;
    if(s<=m) x1=queery(2*nod,l,m);
    if(m<f) x2=queery(2*nod+1,m+1,r);
    return maxi(x1,x2);
    }
}
int main()
{F>>n>>m;
int a,b,i;
for(i=1;i<=n;i++)
 {
     F>>x;
     pos=i;val=x;
     update(1,1,n);
 }
 for(i=1;i<=m;i++)
 {
     F>>x>>a>>b;
    if(x==0)
    {s=a;f=b;
     g<<queery(1,1,n)<<endl;
    }
    else
    {
        pos=a;val=b;
        update(1,1,n);
    }
 }
    return 0;
}