Nu aveti permisiuni pentru a descarca fisierul grader_test42.ok

Cod sursa(job #2134443)

Utilizator netfreeAndrei Muntean netfree Data 17 februarie 2018 22:44:55
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include <bits/stdc++.h>

using namespace std;

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

const int N_MAX = 100000 + 5;
const int inf = 0x3f3f3f3f;

int n, m, ait[4*N_MAX];

int query(int poz, int lo, int hi, int st, int dr){
  if(hi < st or lo > dr)
    return -inf;
  if(st >= lo and dr <= hi)
    return ait[poz];
  int mid = (st + dr)/2;
  return max(query(poz * 2, lo, hi, st, mid), query(poz * 2 + 1, lo, hi, mid + 1, dr));

}

void update(int poz, int poz_to_upd, int new_val, int st, int dr){
  if(poz_to_upd < st or poz_to_upd > dr)
    return;
  if(poz_to_upd == st and st == dr){
    ait[poz] = new_val;
    return;
  }
  int mid = (st+dr)/2;
  update(poz*2, poz_to_upd, new_val, st, mid);
  update(poz*2 + 1, poz_to_upd, new_val, mid+1, dr);
  ait[poz] = max(ait[poz*2+1], ait[poz*2]);
}

int main(){
  fin >> n >> m;
  for(int i = 1, nr; i<=n; ++i){
    fin >> nr;
    update(1, i, nr, 1, n);
  }
  while(m--){
    int type, a, b;
    fin >> type >> a >> b;
    if(type == 0)
      fout << query(1, a, b, 1, n) << '\n';
    else
      update(1, a, b, 1, n);
  }
	return 0;
}

//Andrei Muntean, 2018