Cod sursa(job #2107333)

Utilizator madalin98Gherghe Madalin madalin98 Data 17 ianuarie 2018 00:23:03
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.27 kb
#include<fstream>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int v[200001],a[200001];
int build(int nod,int l,int r)
{
    int mid=(l+r)/2;
    if(r==l){
        a[nod]=v[l];
        return v[l];
    }
    int val1=build(2*nod,l,mid);
    int val2=build(2*nod+1,mid+1,r);
    if(val1>val2)a[nod]=val1;
       else a[nod]=val2;
    return a[nod];
}
void update(int pos,int x,int nod,int l,int r)
{
    int mid=(l+r)/2;
    if(r==l){
        a[nod]=x;
        v[l]=x;
    }
    else{
        if(pos<=mid)update(pos,x,2*nod,l,mid);
            else update(pos,x,2*nod+1,mid+1,r);
        if(a[2*nod]>a[2*nod+1])a[nod]=a[2*nod];
          else a[nod]=a[2*nod+1];
    }
}
int query(int st_q,int dr_q,int nod,int l,int r)
{
    int mid=(l+r)/2;
    if(st_q>r||l>dr_q)return 0;
	if(st_q<=l&&r<=dr_q)return a[nod];
    int val1=query(st_q,dr_q,2*nod,l,mid);
    int val2=query(st_q,dr_q,2*nod+1,mid+1,r);
    if(val1>val2)return val1;
      else return val2;
}
int main()
{
    int n,m,i,x,v1,v2;
    f>>n>>m;
    for(i=1;i<=n;i++)
        f>>v[i];
    build(1,1,n);
    for(i=1;i<=m;i++)
    {
        f>>x>>v1>>v2;
        if(x==0)g<<query(v1,v2,1,1,n)<<'\n';
          else update(v1,v2,1,1,n);
    }
    return 0;
}