Cod sursa(job #1314065)

Utilizator claudiu.gatinaFMI Claudiu Gatina claudiu.gatina Data 11 ianuarie 2015 14:55:38
Problema Arbori de intervale Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.5 kb
#include <iostream>
#include <fstream>
#include <cmath>

using namespace std;

const int Nrmin=0;
unsigned long int v[1000000],s[1000],maxim;
int q,a,b,m,n,c,k=1,j=1,i,tip;

int main()
{
    fstream f("arbint.in",ios::in);
    fstream g("arbint.out",ios::out);
    f>>n>>m;
    c=sqrt(n);
    for(i=1;i<=n;i++)
    {
        f>>v[i];
        if(j==c || i==n-1)
        {
            if(maxim<v[i])
                maxim = v[i];
            j=1;
            s[k]=maxim;
            maxim = Nrmin;
            k++;
        }
        else
        {
            if(maxim<v[i])
                maxim = v[i];
            j++;
        }
    }
    for(q=0;q<m;q++)
    {
        f>>tip>>a>>b;
        if(tip)
        {
            v[a]=b;
            if(b>=s[a/c])
                s[a/c]=b;
            else
            {
                maxim = Nrmin;
                for(i=a/c*c;i<(a/c+1)*c;i++)
                    if(v[i]>maxim)
                        maxim=v[i];
                s[a/c]=maxim;
            }

        }
        else
        {
            maxim = Nrmin;
            for(i=a;i<=(a/c+1)*c && i<=b;i++)
                if(v[i]>maxim)
                    maxim=v[i];
            for(i=a/c+1;i<=b/c;i++)
                if(s[i]>maxim)
                    maxim=s[i];
            if(a/c!=b/c)
                for(i=b/c*c;i<=b;i++)
                    if(v[i]>maxim)
                        maxim = v[i];
            g<<maxim<<endl;
        }
    }
    return 0;
}