Cod sursa(job #2946140)

Utilizator dobreraduDobre Radu Fabian dobreradu Data 24 noiembrie 2022 16:38:09
Problema Arbori de intervale Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.24 kb
#include <iostream>
#include <fstream>
#include <math.h>
using namespace std;

const int NMAX = 100000;
int v[NMAX+1],batog[320];

int main()
{
    ifstream in("arbint.in");
    ofstream out("arbint.out");
    int n, m, a, b, i, cer, j;
    in >> n >> m;
    int x = sqrt(n);
    for( i = 0; i < n ; i++ ){
      in >> v[i];
      batog[i / x] = max( batog[i / x] , v[i]);
    }
    for( i = 0 ; i < m ; i++ ){
      in >> cer >> a >> b;
      a--;
      if( cer == 0 ){
        b--;
        int st = a / x , dr = b / x , maxi = 0;
        if( st == dr ){
            for( j = a ; j <= b ; j++)
              maxi = max(maxi, v[j]);
        }
        else{
            int fin = min(x * ( st + 1 ) , n);
            for( j = a ; j < fin ; j++ )
              maxi = max(maxi , v[j]);
            for( j = st + 1 ; j < dr ; j++ )
              maxi = max(maxi, batog[j]);
            for( j = b ; j >= x * dr; j--)
              maxi = max(maxi, v[j]);
        }
        out << maxi << endl;
      }
      else{
        int st = a / x , maxi = 0;
        int fin = min(x * ( st + 1 ) , n);
        v[a] = b;
        for( j = x * st ; j < fin; j++ )
          batog[st] = max( maxi , v[j]);
      }
    }
    return 0;
}