Cod sursa(job #2163169)

Utilizator futurengineerOana Rosca futurengineer Data 12 martie 2018 16:59:18
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include <fstream>

using namespace std;

int n, op, poz, val, maxim, start, finish, a, b, cod;
int arb[500005];

void update(int nod, int left, int right) {
  if (left == right)
    arb[nod] = val;
  else {
    int m = (left+right)/2;
    if (poz <= m)
      update(2*nod, left, m);
    else
      update(2*nod+1, m+1, right);
    arb[nod] = max(arb[2*nod], arb[2*nod+1]);
  }
}

void query(int nod, int left, int right) {
  if (start <= left and right <= finish) {
    maxim = max(maxim, arb[nod]);
    return;
  }
  int m = (left+right)/2;
  if (start <= m)
    query(2*nod, left, m);
  if (m < finish)
    query(2*nod+1, m+1, right);
}

int main () {
  ifstream fi("arbint.in");
  ofstream fo("arbint.out");
  fi >> n >> op;
  for (int i = 1; i <= n; i++)
    fi >> val, poz = i, update(1, 1, n);
  for (int i = 1; i <= op; i++) {
    fi >> cod >> a >> b;
    if (cod == 0) {
      start = a, finish = b;
      maxim = -1;
      query(1, 1, n);
      fo << maxim << '\n';
    }
    else
      poz = a, val = b, update(1, 1, n);
  }
  return 0;
}