Cod sursa(job #2394279)

Utilizator VNohaiNohai Vlad-Auras VNohai Data 1 aprilie 2019 15:06:28
Problema Arbori de intervale Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.01 kb
#include <iostream>
#include <fstream>
using namespace std;

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

#define NMAX 100001

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

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

void update(int nod)
{
    if(nod>0)
    {
    v[nod]=max(v[nod*2], v[nod*2+1]);
    update(nod/2);
    }
}

void query(int nod, int l, int r, int x, int y)
{
     if(x<=l && y>=r)
     {
     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;
    start=init(n);
    for(int i=1; i<=n; i++)
    {
    fin>>v[start+i];
    update((start+i)/2);
    }
    for(int i=1; i<=m; i++)
    {
    int c, a, b;
    fin>>c>>a>>b;
    if(c)
    {
    v[start+a]=b;
    update((start+a)/2);
    }
    else
    {
    query(1, 1, n, a, b);
    fout<<maxim<<'\n';
    }
    }
    return 0;
}