Cod sursa(job #1394544)

Utilizator alexmisto342Turdean Alexandru alexmisto342 Data 20 martie 2015 13:22:17
Problema Arbori de intervale Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.45 kb
#include <fstream>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int i,k,v[400005],j,a,b,c,x,y,d,val,n,m,maxi;
int variabila_inutila[1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1];
void update(int st,int dr,int nod)
{
    if(st>=dr)
    {
        v[nod]=val;
        return;
    }
    int mij=st+((-(st-dr))>>1);
    if(a>mij)
        update(mij+1,dr,nod<<1);
    else
        update(st,mij,(nod<<1)+1);
    v[nod]=max(v[nod*2],v[nod*2+1]);
}
void updatee(int st,int dr,int nod)
{
    if(st>=dr)
    {
        v[nod]=v[st];
        return;
    }
    int mij=st+((-(st-dr))>>1) ;
        updatee(mij+1,dr,nod<<1);
        updatee(st,mij,(nod<<1)+1);
    v[nod]=max(v[nod*2],v[nod*2+1]);
}
void querry(int st,int dr,int tacidinguratudorcatesparg)
{
    if(st>=a&&dr<=b)
       {maxi=max(maxi,v[tacidinguratudorcatesparg]);
        return ;}
    int mij=st+((-(st-dr))>>1);
    if(a<=mij)
        querry(st,mij,tacidinguratudorcatesparg<<1);
    if(b>mij)
        querry(mij+1,dr,(tacidinguratudorcatesparg<<1)+1);
}
int main()
{
    fin>>n>>m;
    for(i=1;i<=n;i++)
        fin>>a,updatee(1,n,1);
    for(i=1;i<=m;i++)
    {
        int p;
        fin>>p>>a>>b;
        if( p == 1 )
        {
            val=b;
            update(1,n,1);
        }
        else
        {
             maxi=0;
             querry(1,n,1);
             fout<<maxi<<"\n";
        }
    }
    return 0;
}