Cod sursa(job #1421004)

Utilizator ionut98Bejenariu Ionut Daniel ionut98 Data 19 aprilie 2015 10:27:18
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.18 kb
#include<fstream>
using namespace std;
ifstream f("datorii.in");
ofstream g("datorii.out");
const int NMax=100000;
int aint[NMax*4];
void update(int node,int lo,int hi,int pos,int val)
{
    if(lo==hi)
    {
        aint[node]=val;
        return ;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        ;
    }
    int mid=lo+(hi-lo)/2;

    if(pos<=mid)
      update(node*2,lo,mid,pos,val);
    else
      update(node*2+1,mid+1,hi,pos,val);

    aint[node]=max(aint[node*2],aint[node*2+1]);
}
int query(int node,int lo,int hi,int a,int b)
{
    if(a<=lo&&b>=hi)
      return aint[node];
    int mid=lo+(hi-lo)/2;
    int A=0;
    int B=0;
    if(a<=mid)
    {
        A=query(node*2,lo,mid,a,b);
    }
    if(b>mid)
    {
        B=query(node*2+1,mid+1,hi,a,b);
    }
    return max(A,B);
}
int main()
{
    int n,m,x,a,b;
    f>>n>>m;
    for(int i=1;i<=n;i++)
    {
        f>>x;
        update(1,1,n,i,x);
    }
    for(int i=1;i<=m;i++)
    {
        f>>x>>a>>b;
        if(x==0)
          update(1,1,n,a,b);
        else
          g<<query(1,1,n,a,b)<<"\n";
    }
    return 0;
}