Pagini recente » Cod sursa (job #3154634) | Cod sursa (job #2128441) | Cod sursa (job #474675) | Cod sursa (job #1657859) | Cod sursa (job #2815601)
#include <bits/stdc++.h>
#define MAXX 1000
using namespace std;
ifstream in ("arbint.in");
ofstream out ("arbint.out");
const int square = sqrt (MAXX);
int v[MAXX];
int n, m, i;
int batog[34]; // nu imi mergea declararea cu const int
void build (int l){
int j;
for (j = 0; j < n; j ++){
in >> v[j];
}
for (j = 0; j < n; j ++){
batog[j / square] = max(batog[j / square], v[j]);
}
}
void update (int a, int b){
if (v[a] != batog[a / square]){
v[a] = b;
batog[a / square] = max(batog[a / square], b);
}
else {
int first_spot = (a / square) * square;
int last_spot =(a / square) * square + square;
int j;
v[a] = b;
batog[first_spot / square] = -1;
for (j = first_spot; j < last_spot; j ++){
batog[j / square] = max (batog[j / square], v[j]);
}
}
}
int query (int a, int b){
int first_Int = min ((a / square) * square + square, b);
int last_Int = max ((b / square) * square, a);
int j, maxxi = -1;
for (j = a; j < first_Int; j ++) //stanga
maxxi = max (maxxi, v[j]);
for (j = last_Int + 1; j <= b; j ++) //dreapta
maxxi = max (maxxi, v[j]);
for (j = first_Int / square; j < (last_Int + 1) / square; j ++) // mijl
maxxi = max (maxxi, batog[j]);
out << maxxi << '\n';
}
int main()
{
in >> n >> m;
build (n);
int op, a, b;
for (i = 0; i < m; i ++){
in >> op;
if (op == 1){
in >> a >> b;
update (a - 1, b);
}
else if (op == 0){
in >> a >> b;
query (a - 1, b - 1);
}
}
return 0;
}