Cod sursa(job #3260327)

Utilizator Sorin_GabrielGabara Sorin Gabriel Sorin_Gabriel Data 1 decembrie 2024 17:14:08
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.89 kb
#include <iostream>
#include <fstream>
#include <bits/stdc++.h>
#define VMAX 100005
using namespace std;
ifstream fin ("arbint.in");
ofstream fout ("arbint.out");

struct nod
{
    int val;
    int flag;
};

nod da_tree[VMAX*4];
int maxi;

void build(int nr, int st, int dr)
{
    int mij = (st+dr)/2;
    if(st == dr)
    {
        fin>>da_tree[nr].val;
        da_tree[nr].flag = 0;
    }
    else
    {
        build(nr*2,st, mij);
        build(nr*2+1,mij+1, dr);
        da_tree[nr].val = max(da_tree[nr*2].val,da_tree[2*nr+1].val);
        da_tree[nr].flag = 0;
    }
}

void querry(int nr, int st, int dr, int a, int b)
{
    if(a<=st && dr<=b)
    {
        maxi = max(maxi,da_tree[nr].val);
    }
    else
    {
        if(da_tree[nr].flag)
        {
            da_tree[2*nr]=da_tree[2*nr+1]=da_tree[nr];
            da_tree[nr].flag = 0;
        }
        int mij = (st+dr)/2;

        if(mij>=a)
            querry(nr*2, st, mij, a, b);
        if(mij+1<=b)
            querry(2*nr+1, mij+1, dr, a, b);
    }
}

void update(int val, int nr, int st, int dr, int a, int b)
{
    if(a<=st && dr<=b)
    {
        da_tree[nr].val=val;
        da_tree[nr].flag = 1;
    }
    else
    {
        int mij = (st+dr)/2;
        if(mij>=a)
            update(val, nr*2, st, mij, a, b);
        if(mij+1<=b)
            update(val, nr*2+1, mij+1, dr, a, b);
        da_tree[nr].val = max(da_tree[nr*2].val,da_tree[nr*2+1].val);
    }
}


int main()
{
    ios_base::sync_with_stdio(0);
    long long int n,m,i,j,k,t,q,nr,minim,maxim,suma,x,y,z;
    fin>>n>>m;
    build(1,1,n);
    for(i=0;i<m;i++)
    {
        fin>>x>>y>>z;
        if(x==0)
        {
            maxi = 0;
            querry(1,1,n,y,z);
            fout<<maxi<<'\n';
        }
        else
        {
            update(z,1,1,n,y,y);
        }
    }




    return 0;
}