Cod sursa(job #2502818)

Utilizator pitradaPit-Rada Ionel-Vasile pitrada Data 1 decembrie 2019 17:27:56
Problema Arbori de intervale Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.39 kb
#include <fstream>
#include <math.h>
using namespace std;
ifstream  cin("arbint.in");
ofstream cout("arbint.out");
int n,m,r,v[101005];
struct nod{
    int a,b,m;
}s[320];
int main(){
    int i,j,k,x,c,a,b;
    cin>>n>>m;
    r=1+sqrt(n);
    for(i=1;i<=n;i++)cin>>v[i];
    for(x=0,k=0,i=1,j=1;i<=n;i++){
        x=max(x,v[i]);
        if(i%r==0 || i==n){
            k++;
            s[k]={j,i,x};
            j=i+1;
            x=0;
        }
    }
    while(m--){
        cin>>c>>a>>b;
        if(c==0){
            i=1+(a-1)/r;
            j=1+(b-1)/r;
            if(i==j){
                x=0;
                while(a<=b){
                    x=max(x,v[a]);
                    a++;
                }
                cout<<x<<"\n";
            }
            else{
                x=0;
                while(a<=s[i].b){
                    x=max(x,v[a]);
                    a++;
                }
                while(i<j){
                    x=max(x,s[i].m);
                    i++;
                }
                a=s[j].a;
                while(a<=b){
                    x=max(x,v[a]);
                    a++;
                }
                cout<<x<<"\n";
            }
        }
        else{
            v[a]=b;
            i=1+(a-1)/r;
            s[i].m=max(s[i].m,b);
        }
    }
    cin.close(); cout.close();
    return 0;
}