Cod sursa(job #1298815)

Utilizator bence21Bako Bence bence21 Data 23 decembrie 2014 10:33:07
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include<fstream>
using namespace std;
long a,b,t[400066],n,m,x,p,ma,c;
void u(long no,long l,long r)
{
    if(l==r)
    {
        t[no]=x;
        return;
    }
    long d=(l+r)/2;
    if(p<=d)
        u(2*no,l,d);
    else u(2*no+1,d+1,r);
    if(t[2*no+1]>t[2*no])
    t[no]=t[2*no+1];
    else t[no]=t[2*no];
}
void q(long no,long l,long r)
{
    if(a<=l&&r<=b)
    {
        if(ma<t[no])
            ma=t[no];
        return;
    }
    long d=(l+r)/2;
    if(a<=d)
        q(2*no,l,d);
    if(d<b)
        q(2*no+1,d+1,r);
}
int main()
{
    ifstream f("arbint.in");
    ofstream g("arbint.out");
    f>>n>>m;
    long i;
    for(i=1;i<=n;i++)
    {
        f>>x;
        p=i;
        u(1,1,n);
    }
    for(i=1;i<=m;i++)
    {
        f>>c>>a>>b;
        if(c)
        {
            p=a;
            x=b;
            u(1,1,n);
        }
        else
        {
            ma=-1;
            q(1,1,n);
            g<<ma<<"\n";
        }
    }
    f.close();
    g.close();
    return 0;
}