Pagini recente » Cod sursa (job #89741) | Cod sursa (job #2161720) | Cod sursa (job #1930842) | Cod sursa (job #2775221) | Cod sursa (job #2426099)
#include <fstream>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int i, n, m, op, a, b, value, pos, aint[300001], v[100001], Maxi;
void update(int node, int st,int dr){
if(st == dr){
aint[node] = value;
return ;
}
int mid = (st + dr) / 2;
if(mid < pos)
update(2 * node + 1, mid + 1, dr);
else
update(2 * node, st, mid);
aint[node] = max(aint[2 * node + 1], aint[2 * node]);
}
void quary(int node,int st,int dr){
if(st >= a && dr <= b){
Maxi = max(Maxi, aint[node]);
return;
}
int mid = (st + dr) / 2;
if(mid >= a)
quary(2 * node, st, mid);
if(mid + 1 <= b)
quary(2 * node + 1, mid + 1, dr);
}
int main()
{ f >> n >> m;
for(i = 1; i <= n; i++){
f >> v[i];
pos = i;
value = v[i];
update(1, 1, n);
}
for(i = 1; i <= m; i++){
f >> op >> a >> b;
if(op == 0){
Maxi = 0;
quary(1, 1, n);
g << Maxi << '\n';
}
else{
pos = a;
value = b;
update(1, 1, n);
}
}
return 0;
}