Cod sursa(job #1443059)

Utilizator ZimmyZimmermann Erich Zimmy Data 26 mai 2015 18:55:46
Problema Arbori de intervale Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.72 kb
#include <fstream>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int n,m,a,b,k,x[(1<<18)+5],c,Max(int,int,int),i;
int main()
{
    f>>n>>m;
    for(k=1;;k*=2)if(k>=n)break;
    for(i=1;i<=n;i++)
        f>>x[k-1+i];
    for(i=k;i>=1;i--)
        x[i]=max(x[2*i],x[2*i+1]);

    for(;m;m--)
    {
        f>>c>>a>>b;
        if(c==0)
            g<<Max(1,n,1)<<'\n';
        else
        {
            x[k-1+a]=b;
            for(i=(k-1+a)/2;i;i/=2)
                x[i]=max(x[2*i],x[2*i+1]);
        }
    }

    return 0;
}
int Max(int l,int r,int N)
{
    if(a<=l&& r<=b)return x[N];
    if(r<a || l>b) return 0;
    return max(Max(l,(l+r)/2,2*N),Max((l+r)/2+1,r,2*N+1));
}