Cod sursa(job #2486972)

Utilizator vali_27Bojici Valentin vali_27 Data 3 noiembrie 2019 18:29:17
Problema Arbori de intervale Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.26 kb
#include <bits/stdc++.h>
#define NMAX 100001
using namespace std;

int v[NMAX];

FILE *fin = fopen("arbint.in","r");
FILE *fout= fopen("arbint.out","w");
void update(int nod,int st,int dr,int poz,int val)
{
    if(st == dr)
        v[nod] = val;
    else
    {
        int d = (st + dr)/2;
        if(poz <= d)
            update(nod*2, st, d, poz, val);
        else
            update(nod*2+1, d+1, dr, poz, val);

        v[nod] = max(v[nod*2],v[nod*2+1]);
    }
}

void query(int nod,int st,int dr,int x,int y,int &rez)
{
    if( st >= x && dr <= y)
        rez = max(rez,v[nod]);
    else
    {
        int d = (st+dr)/2;
        if(d >=x )
            query(nod*2, st, d, x, y, rez);
        if(d < y )
            query(nod*2+1, d+1, dr, x, y, rez);
    }
}

void citire()
{
    int n, m, x, y, tip, maxx;
    fscanf(fin,"%d %d",&n,&m);
    for(int i=1;i<=n;++i)
    {
        fscanf(fin,"%d",&x);
        update(1,1,n,i,x);
    }
    while(m--)
    {
        fscanf(fin,"%d %d %d",&tip,&x,&y);
        if( tip == 0 )
        {
            maxx = -1;
            query(1,1,n,x,y,maxx);
            fprintf(fout,"%d\n",maxx);
        }
        else
            update(1,1,n,x,y);
    }
}

int main()
{
    citire();
}