Cod sursa(job #3347531)

Utilizator RaMiDraDragulescu Rares Mihai RaMiDra Data 17 martie 2026 09:42:16
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.7 kb
#include <iostream>
#include <fstream>
#include <cmath>
#define MAXN 100000
#define MAXSQRT 317
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int bucket[MAXSQRT];
int v[MAXN];
int main()
{
    int n, m, bucket_size, st, dr, bst, bdr, i, j, query_type, bucket_nr, primul, ultimul, maximul;
    fin>>n>>m;
    bucket_size=sqrt(n);
    for(i=0;i<n;i++){
        fin>>v[i];
        bucket_nr=i/bucket_size;
        bucket[bucket_nr]=max(bucket[bucket_nr], v[i]);
    }
    for(i=0;i<m;i++){
        fin>>query_type>>st>>dr;
        st--;
        if(query_type==1){
            v[st]=dr;
            bucket_nr=st/bucket_size;
            bucket[bucket_nr]=0;
            primul = bucket_size * bucket_nr;
            ultimul = bucket_size * (bucket_nr + 1) - 1;
            for(j=primul;j<=ultimul;j++){
                bucket[bucket_nr]=max(bucket[bucket_nr], v[j]);
            }
        }
        else{
            dr--;
            bst=st/bucket_size;
            maximul=0;
            ultimul=(bst+1)*bucket_size-1;
            bdr=dr/bucket_size;
            primul=bdr*bucket_size;
            if(bst!=bdr){
                for(j=st;j<=ultimul;j++){
                    maximul=max(maximul, v[j]);
                }

                for(j=primul;j<=dr;j++){
                    maximul=max(maximul, v[j]);
                }
                for(j=bst+1;j<bdr;j++){
                    maximul=max(maximul, bucket[j]);
                }
            }
            else{
                for(j=st;j<=dr;j++){
                    maximul=max(maximul, v[j]);
                }
            }
            fout<<maximul<<'\n';
        }
    }
    return 0;
}