Cod sursa(job #1068767)

Utilizator Catalina_BrinzaBrinza Catalina Catalina_Brinza Data 28 decembrie 2013 18:45:48
Problema Arbori de intervale Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.32 kb
//
//  main.cpp
//  arbint
//
//  Created by Catalina Brinza on 11/19/13.
//  Copyright (c) 2013 Catalina Brinza. All rights reserved.
//

#include <fstream>
#include <math.h>
#include <vector>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");

int main()
{int n,m,k,p,q,x,i,j,maxi;
    int a[1000001];
    int max[50001];
    
    f>>n>>m;
    k=sqrt(n);
    for (i=0;i<=n/k+1;i++) max[i]=0;
    for (i=1;i<=n;i++)
    {
        f>>a[i];
        if (a[i]>max[i/k]) max[i/k]=a[i];
        
    }

    for (i=0;i<m;i++)
    {
    
 
    f>>x>>p>>q;

        if (x==1)
        {
            int y=a[p];
            a[p]=q;
            if (max[p/k]==y)
            {
                max[p/k]=0;
                for (j=(p/k)*k;j<(p/k+1)*k;j++)
                    if (max[p/k]<a[j]) max[p/k]=a[j];
              
            }
            if (a[p]>max[p/k]) max[p/k]=a[p];
        
            
        }
        else
        {
            if (p==q) maxi=a[p];
            else {maxi=a[p];

            for (j=p/k+1;j<q/k;j++)
                if (maxi<max[j]) maxi=max[j];
            
            for (j=p+1;j/k<p/k+1;j++)
                if (maxi<a[j]) maxi=a[j];
            
        
                for (j=q;j/k>j/k+1;j--)
                if (maxi<a[j]) maxi=a[j];}
            g<<maxi<<"\n";
        }
    }
    return 0;
}