Cod sursa(job #1869302)

Utilizator AhileGigel Frone Ahile Data 5 februarie 2017 18:41:39
Problema Arbori de intervale Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.36 kb
#include<bits/stdc++.h>
#define in f
#define out g
using namespace std;

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

int const maxsize = 10000000;

int n, m, code, a, b;
int v[maxsize];
int h[100000];

int main() {

    in >> n >> m;
    int s = sqrt(n);
    for (int i = 1; i <= n; i++) {
        in >> v[i];
        h[i / s] = max(h[i / s], v[i]);
    }
    for (int i = 1; i <= m; i++) {
        in >> code >> a >> b;
        if (code == 0) {
            int maxx = 0;
            for (int j = a; j <= b; j++) {
                if (j % s == 0 && j + s <= b) {
                    maxx = max(maxx, h[j / s]);
                    j += (s - 1);
                } else
                    maxx = max(maxx, v[j]);
            }
            out << maxx << endl;
        } else {
            if (v[a] == h[a / s] && v[a] > b) {
                v[a] = b;
                h[a / s] = 0;
                if(a < s) {
                    for(int j = a - a % s + 1; j < a / s + s; j++)
                        h[a / s] = max(h[a / s], v[j]);
               } else {
                    for(int j = a - a % s; j < a / s + s; j++)
                        h[a / s] = max(h[a / s], v[j]);
                }
            } else {
                h[a / s] = max(h[a / s], b);
                v[a] = b;
            }
        }
    }
    return 0;
}