#include <iostream>
#include <cstdio>
using namespace std;
#define max(a, b) (a>b?a:b)
int tree[100005], lazy[100005];
void init(int idx, int l, int r){
if(l>r)
return ;
if(l==r){
tree[idx] = 0;
lazy[idx] = -1;
}
else {
tree[idx] = 0;
lazy[idx] = -1;
int mid = (l+r)/2;
init(2*idx, l, mid);
init(2*idx+1, mid+1, r);
}
}
void update(int idx, int l, int r, int a, int b, int val, bool isReset){
if(l>r || b<l || a>r){
return;
}
// printf("idx=%d l=%d r=%d a=%d b=%d val=%d\n",idx,l,r,a,b,val);
if(lazy[idx] != -1){
tree[idx] = max(tree[idx], lazy[idx]);
lazy[2*idx] = max(lazy[2*idx], lazy[idx]);
lazy[2*idx+1] = max(lazy[2*idx+1], lazy[idx]);
lazy[idx] = -1;
}
if(l>=a && r<=b){
// printf("updating\n");
tree[idx] = max(tree[idx], val);
if(isReset){
tree[idx] = val;
}
lazy[2*idx] = max(lazy[2*idx], val);
lazy[2*idx+1] = max(lazy[2*idx+1], val);
lazy[idx] = -1;
}
else {
int mid = (l+r)/2;
update(2*idx, l, mid, a, b, val, isReset);
update(2*idx+1, mid+1, r, a, b, val, isReset);
tree[idx] = max(tree[2*idx], tree[2*idx+1]);
}
}
int query(int idx, int l, int r, int a){
if(l>r || a<l || a>r){
return -1;
}
// printf("idx=%d l=%d r=%d a=%d\n",idx,l,r,a);
if(lazy[idx] != -1){
tree[idx] = max(tree[idx], lazy[idx]);
lazy[2*idx] = max(lazy[2*idx], lazy[idx]);
lazy[2*idx+1] = max(lazy[2*idx+1], lazy[idx]);
lazy[idx] = -1;
}
if(l==a && r==a){
// printf("----l=%d r=%d a=%d tree=%d\n",l,r,a,tree[idx]);
return tree[idx];
}
else {
int mid = (l+r)/2;
int left = query(2*idx, l, mid, a);
int right = query(2*idx+1, mid+1, r, a);
return max(left, right);
}
}
int main() {
init(1, 1, 10);
update(1, 1, 10, 1, 4, 7, false);
cout << query(1, 1, 10, 3) << endl;
update(1, 1, 10, 3, 3, 9, false);
cout << query(1, 1, 10, 3) << endl;
update(1, 1, 10, 3, 3, 0, true);
cout << query(1, 1, 10, 3) << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0ZGlvPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwojZGVmaW5lIG1heChhLCBiKSAoYT5iP2E6YikKaW50IHRyZWVbMTAwMDA1XSwgbGF6eVsxMDAwMDVdOwp2b2lkIGluaXQoaW50IGlkeCwgaW50IGwsIGludCByKXsKCWlmKGw+cikKCQlyZXR1cm4gOwoJaWYobD09cil7CgkJdHJlZVtpZHhdID0gMDsKCQlsYXp5W2lkeF0gPSAtMTsKCX0KCWVsc2UgewoJCXRyZWVbaWR4XSA9IDA7CgkJbGF6eVtpZHhdID0gLTE7CgkJaW50IG1pZCA9IChsK3IpLzI7CgkJaW5pdCgyKmlkeCwgbCwgbWlkKTsKCQlpbml0KDIqaWR4KzEsIG1pZCsxLCByKTsKCX0KfQp2b2lkIHVwZGF0ZShpbnQgaWR4LCBpbnQgbCwgaW50IHIsIGludCBhLCBpbnQgYiwgaW50IHZhbCwgYm9vbCBpc1Jlc2V0KXsKCWlmKGw+ciB8fCBiPGwgfHwgYT5yKXsKCQlyZXR1cm47Cgl9CgkvLyBwcmludGYoImlkeD0lZCBsPSVkIHI9JWQgYT0lZCBiPSVkIHZhbD0lZFxuIixpZHgsbCxyLGEsYix2YWwpOwoJaWYobGF6eVtpZHhdICE9IC0xKXsKCQl0cmVlW2lkeF0gPSBtYXgodHJlZVtpZHhdLCBsYXp5W2lkeF0pOwoJCWxhenlbMippZHhdID0gbWF4KGxhenlbMippZHhdLCBsYXp5W2lkeF0pOwoJCWxhenlbMippZHgrMV0gPSBtYXgobGF6eVsyKmlkeCsxXSwgbGF6eVtpZHhdKTsKCQlsYXp5W2lkeF0gPSAtMTsKCX0KCWlmKGw+PWEgJiYgcjw9Yil7CgkJLy8gcHJpbnRmKCJ1cGRhdGluZ1xuIik7CgkJdHJlZVtpZHhdID0gbWF4KHRyZWVbaWR4XSwgdmFsKTsKCQlpZihpc1Jlc2V0KXsKCQkJdHJlZVtpZHhdID0gdmFsOwoJCX0KCQlsYXp5WzIqaWR4XSA9IG1heChsYXp5WzIqaWR4XSwgdmFsKTsKCQlsYXp5WzIqaWR4KzFdID0gbWF4KGxhenlbMippZHgrMV0sIHZhbCk7CgkJbGF6eVtpZHhdID0gLTE7Cgl9CgllbHNlIHsKCQlpbnQgbWlkID0gKGwrcikvMjsKCQl1cGRhdGUoMippZHgsIGwsIG1pZCwgYSwgYiwgdmFsLCBpc1Jlc2V0KTsKCQl1cGRhdGUoMippZHgrMSwgbWlkKzEsIHIsIGEsIGIsIHZhbCwgaXNSZXNldCk7CgkJdHJlZVtpZHhdID0gbWF4KHRyZWVbMippZHhdLCB0cmVlWzIqaWR4KzFdKTsKCX0KfQppbnQgcXVlcnkoaW50IGlkeCwgaW50IGwsIGludCByLCBpbnQgYSl7CglpZihsPnIgfHwgYTxsIHx8IGE+cil7CgkJcmV0dXJuIC0xOwoJfQoJLy8gcHJpbnRmKCJpZHg9JWQgbD0lZCByPSVkIGE9JWRcbiIsaWR4LGwscixhKTsKCWlmKGxhenlbaWR4XSAhPSAtMSl7CgkJdHJlZVtpZHhdID0gbWF4KHRyZWVbaWR4XSwgbGF6eVtpZHhdKTsKCQlsYXp5WzIqaWR4XSA9IG1heChsYXp5WzIqaWR4XSwgbGF6eVtpZHhdKTsKCQlsYXp5WzIqaWR4KzFdID0gbWF4KGxhenlbMippZHgrMV0sIGxhenlbaWR4XSk7CgkJbGF6eVtpZHhdID0gLTE7Cgl9CglpZihsPT1hICYmIHI9PWEpewoJCS8vIHByaW50ZigiLS0tLWw9JWQgcj0lZCBhPSVkIHRyZWU9JWRcbiIsbCxyLGEsdHJlZVtpZHhdKTsKCQlyZXR1cm4gdHJlZVtpZHhdOwoJfQoJZWxzZSB7CgkJaW50IG1pZCA9IChsK3IpLzI7CgkJaW50IGxlZnQgPSBxdWVyeSgyKmlkeCwgbCwgbWlkLCBhKTsKCQlpbnQgcmlnaHQgPSBxdWVyeSgyKmlkeCsxLCBtaWQrMSwgciwgYSk7CgkJcmV0dXJuIG1heChsZWZ0LCByaWdodCk7Cgl9Cn0KaW50IG1haW4oKSB7Cglpbml0KDEsIDEsIDEwKTsKCXVwZGF0ZSgxLCAxLCAxMCwgMSwgNCwgNywgZmFsc2UpOwoJY291dCA8PCBxdWVyeSgxLCAxLCAxMCwgMykgPDwgZW5kbDsKCXVwZGF0ZSgxLCAxLCAxMCwgMywgMywgOSwgZmFsc2UpOwoJY291dCA8PCBxdWVyeSgxLCAxLCAxMCwgMykgPDwgZW5kbDsKCXVwZGF0ZSgxLCAxLCAxMCwgMywgMywgMCwgdHJ1ZSk7Cgljb3V0IDw8IHF1ZXJ5KDEsIDEsIDEwLCAzKSA8PCBlbmRsOwoJcmV0dXJuIDA7Cn0=