Cod sursa(job #1550221)

Utilizator daneel95Holteiu Daniel-Ninel daneel95 Data 13 decembrie 2015 13:39:08
Problema Arbori de intervale Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.57 kb
#include <fstream>
#include <math.h>

using namespace std;

ifstream in("arbint.in");
ofstream out("arbint.out");

int n,n1,m,querry,a[100005],b[1005];

int main()
{
    int i,x,y,radical,k,p,max;
    in>>n>>m;
    radical=int(sqrt(n));
    for(i=0;i<n;i++) in>>a[i];
    k=0;
    p=0;
    //out<<radical<<endl;
    for(i=0;i<n;)
    {
        max=0;
        for(k=1;k<=radical;k++,i++)
        {
            if(a[i]>max) max=a[i];
        }
        b[p]=max;
        p++;
    }

    //for(i=0;i<p;i++) out<<b[i]<<" ";
    //out<<endl;

    for(i=1;i<=m;i++)
    {
        in>>querry>>x>>y;
        if(querry==1)
        {
            max=0;
            a[x-1]=y;
            if(x%radical==0) x--;
            for(k=x/radical;k<=x/radical+radical;k++)
            {
                if(a[i]>max) max=a[i];
            }
            b[x/radical]=max;
        }
        if(querry==0)
        {
            max=0;
            x--;
            y--;
            while(x%radical!=0)
            {
                if(a[x]>max) max=a[x];
                x++;
            }
            if(y%radical==0)
            {
                if(a[y]>max) max=a[y];
                y--;
                while(y%radical!=0)
                {
                    if(a[y]>max) max=a[y];
                    y--;
                }
            }
            for(k=x/radical;k<=y/radical;k++)
            {
                if(b[k]>max) max=b[k];
            }
            out<<max<<endl;
        }
    }
    in.close();
    out.close();
    return 0;
}