Cod sursa(job #2552449)

Utilizator Florinos123Gaina Florin Florinos123 Data 20 februarie 2020 20:45:01
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.15 kb
#include <fstream>

using namespace std;

ifstream f ("arbint.in");
ofstream g ("arbint.out");

int n, m, maxim, arbore[300005];
int i, x, y, poz, val, type;

void update (int nod, int st, int dr)
{
    if (st == dr)
    {
        arbore[nod] = val;
        return;
    }
    int mij = (st + dr) / 2;
     if (poz <= mij)
        update(nod*2, st, mij);
     else
        update(nod*2+1, mij+1, dr);

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

void querry (int nod, int st, int dr)
{
    if (x <= st && y >= dr)
    {
        maxim = max(maxim, arbore[nod]);
        return;
    }

    int mij = (st + dr) / 2;
     if (x <= mij)
        querry(nod*2, st, mij);
     if (mij < y)
        querry(nod*2+1, mij+1, dr);
}

int main()
{
 f >> n >> m;
  for (i=1; i<=n; i++)
  {
     f >> val;
     poz = i;
     update(1, 1, n);
  }

  for (i=1; i<=m; i++)
  {
      f >> type >> x >> y;
       if (type == 0)
       {
          maxim = 0;
          querry(1, 1, n);
          g << maxim << '\n';
       }
       else {
         poz = x, val = y;
         update(1, 1, n);
       }
  }
    return 0;
}