Pagini recente » Cod sursa (job #1880406) | Cod sursa (job #384879) | Cod sursa (job #867614) | Cod sursa (job #1168232) | Cod sursa (job #1287566)
/// Craciun Catalin
/// Arbint
#include <iostream>
#include <fstream>
#define NMax 100005
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int n, m;
int newV;
int pos;
int maxi;
int ARB[2*NMax];
int start, finish;
inline int maxim (int a, int b) { return (a > b)?a:b; };
void query(int nod, int left, int right) {
if (start <= left && right <= finish) {
maxi = maxim(maxi, ARB[nod]);
return;
}
int mij = (left+right)/2;
if (start <= mij)
query(2*nod, left, mij);
if (mij < finish)
query(2*nod+1, mij+1, right);
}
void update(int nod, int left, int right) {
if (left == right) {
ARB[nod] = newV;
return;
}
int mij = (left + right)/2;
if (pos <= mij)
update(2*nod, left, mij);
else
update(2*nod+1, mij+1, right);
ARB[nod] = maxim (ARB[2*nod], ARB[2*nod+1]);
}
void read() {
f>>n>>m;
for (int i = 1; i <= n; i++) {
int x; f>>x;
pos = i;
newV = x;
update(1,1,n);
}
for (int i = 1; i <= m; i++) {
int type; f>>type;
if (type == 1) {
f>>pos>>newV;
update(1,1,n);
} else {
f>>start>>finish;
maxi = -1;
query(1,1,n); g<<maxi<<'\n';
}
}
}
int main() {
read();
f.close(); g.close();
return 0;
}