Cod sursa(job #2394388)

Utilizator VNohaiNohai Vlad-Auras VNohai Data 1 aprilie 2019 16:40:25
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.16 kb
#include <iostream>
#include <fstream>
using namespace std;

ifstream fin("arbint.in");
ofstream fout("arbint.out");

#define NMAX 100001

int n, m, maxim, val, poz;
int v[4*NMAX+66];

int init(int x)
{
    int y=1;
    while(y<x)
        y=y*2;
    return y;
}

void update(int nod, int l, int r)
{
    if(l==r)
    {
    v[nod]=val;
    return;
    }
    int mij=(l+r)/2;
    if(poz<=mij)
    update(nod*2, l, mij);
    else
    update(nod*2+1, mij+1, r);
    v[nod]=max(v[nod*2], v[nod*2+1]);
}

void query(int nod, int l, int r, int x, int y)
{
     if(x<=l && y>=r)
     {
     if(maxim<v[nod])
     maxim=v[nod];
     return;
     }
     int mij=(l+r)/2;
     if(x<=mij) query(nod*2, l, mij, x, y);
     if(y>mij)  query(nod*2+1, mij+1, r, x, y);
}

int main()
{
    fin>>n>>m;
    for(int i=1; i<=n; i++)
    {
    fin>>val;
    poz=i;
    update(1, 1, n);
    }
    for(int i=1; i<=m; i++)
    {
    int c, a, b;
    fin>>c>>a>>b;
    if(c)
    {
    poz=a;
    val=b;
    update(1, 1, n);
    }
    else
    {
    maxim=(1<<31);
    query(1, 1, n, a, b);
    fout<<maxim<<'\n';
    }
    }
    return 0;
}