Cod sursa(job #2774077)

Utilizator Paul281881818818181991919191881818Draghici Paul Paul281881818818181991919191881818 Data 9 septembrie 2021 17:53:16
Problema Arbori de intervale Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.04 kb
#include<fstream>
#include<cmath>
#define N 100002
using namespace std;
ifstream cin("arbint.in");
ofstream cout("arbint.out");

int v[N], b[400];
int main(){
    int n, m, sq, k=-1;
    cin >> n >> m;
    sq = sqrt(n);
    for(int i=0; i<n; i++){
        cin >> v[i];
        if(i%sq == 0){
            k++;
        }
        b[k] =max(b[k], v[i]);
    }
    for(int i=1; i<=m; i++){
        int c, x, y;
        cin >> c >> x >> y;
        if(c == 0){x--;y--;
            int mx = -1;
            while(x<y && x%sq && x){
                mx = max(mx, v[x]);
                x++;
            }
            while(x+sq <= y){
                mx = max(mx, b[x/sq]);
                x += sq;
            }
            while(x <= y){
                mx = max(mx, v[x]);
                x++;
            }
            cout << mx << "\n";
        }
        else{x--;
            v[x] = y;
            b[x/sq] = 0;
            for(int i=(x/sq) *sq; i<(x/sq+1) *sq; i++){
                b[x/sq] = max(b[x/sq], v[i]);
            }
        }
    }
   
    return 0;
}