Cod sursa(job #1784832)

Utilizator Vally77FMI Calinescu Valentin Gelu Vally77 Data 20 octombrie 2016 15:42:09
Problema Arbori de intervale Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include <fstream>
#include <iostream>
#include <math.h>

using namespace std;
ifstream ka("arbint.in");
ofstream ki("arbint.out");

const int N_MAX = 100000;
const int SQRT_MAX = 317;
int a, b, c, n, m, x, v[N_MAX + 1], bb[SQRT_MAX + 1];

int main()
{
   ka >> n >> m;
   int t = (int)sqrt(n) + 1;
   for(int i = 0; i <= t; i++)
   	bb[i] = -1;
   for(int i = 1; i <= n; i++)
   {
      ka >> x;
      v[i] = x;
      bb[i / t] = max(bb[i / t], x);
   }
   for(int i = 1; i <= m; i++)
   {
      ka >> c >> a >> b;
      if(c == 0)
      {
	      int maxim = -1;
	      int j = a;
	      for(; j % t != 0 && j <= b; j++)
		maxim = max(maxim, v[j]);
	      //cout << j;
	      for(; b - j > t; j += t)
		maxim = max(maxim, bb[j / t]);
	      for(; j <= b; j++)
		maxim = max(maxim, v[j]);
	      ki << maxim << '\n';
      }
      else
      {
            v[a] = b;
            bb[a / t] = -1;
            int c1 = (a / t) * t, c2 = (a / t + 1) * t;
            for(int j = c1; j <= n && j < c2; j++)
              bb[a / t] = max(bb[a / t], v[j]);
      }
   }
}