Cod sursa(job #1036638)

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

#include <iostream>
#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
        {
            maxi=a[p];

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