Cod sursa(job #1415304)

Utilizator Darius15Darius Pop Darius15 Data 4 aprilie 2015 10:56:12
Problema Arbori de intervale Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.52 kb
#include <fstream>
#include <cmath>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int n,m,c,i,a[100001],st[100001],dr[100001],l,j,MAX[100001],t,x,y,ans,z;
int main()
{
    f>>n>>m;
    c=sqrt(n);
    for (i=1;i<=n;i++)
    f>>a[i];
    for (i=1;i<=n;i+=c)
    st[++l]=i,dr[l]=min(i+c-1,n);
    for (i=1;i<=l;i++)
    {
        for (j=st[i];j<=dr[i];j++)
            if (MAX[i]<a[j])
            MAX[i]=a[j];
    }
    for (i=1;i<=m;i++)
    {
        f>>t>>x>>y;
        if (t==0)
        {
            ans=0;
            for (j=1;j<=l;j++)
                if (st[j]<=x && x<=dr[j])
            {
                for (z=x;z<=dr[j];z++)
                if (ans<a[z])
                    ans=a[z];
            }
            else if (x<st[j])
            {

                if (dr[j]<y){
                    if (ans<MAX[j])
                    ans=MAX[j];
                }
                else if (st[j]<=y && y<=dr[j])
                {
                    for (z=st[j];z<=y;z++)
                    if (ans<a[z])
                    ans=a[z];
                }
            }
            g<<ans<<'\n';
        }
        else
        {
            a[x]=y;
            for (j=1;j<=l;j++){
                if (st[j]<=x && x<=dr[j])
                   {
                       MAX[j]=0;
                   for (z=st[j];z<=dr[j];z++)
                   if (MAX[j]<a[z])
                   MAX[j]=a[z];
                   }
            }
        }
    }

    return 0;
}