|  | @@ -25,6 +25,7 @@ public:
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  private:
 | 
	
		
			
				|  |  |      struct SegNode {
 | 
	
		
			
				|  |  | +        // "lazy" only apply to children, not node itself
 | 
	
		
			
				|  |  |          int lazy;
 | 
	
		
			
				|  |  |          int k;
 | 
	
		
			
				|  |  |          int lc;
 | 
	
	
		
			
				|  | @@ -52,10 +53,8 @@ private:
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      void push_up(int pos) {
 | 
	
		
			
				|  |  | -        if (st[pos].lc != 0)
 | 
	
		
			
				|  |  | -            st[pos].k = std::max(st[pos].k, st[st[pos].lc].k);
 | 
	
		
			
				|  |  | -        if (st[pos].rc != 0)
 | 
	
		
			
				|  |  | -            st[pos].k = std::max(st[pos].k, st[st[pos].rc].k);
 | 
	
		
			
				|  |  | +        if (st[pos].lc != 0) st[pos].k = std::max(st[pos].k, st[st[pos].lc].k);
 | 
	
		
			
				|  |  | +        if (st[pos].rc != 0) st[pos].k = std::max(st[pos].k, st[st[pos].rc].k);
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      void update(int pos, int val, int l, int r, int ql, int qr) {
 |