全WA求条
查看原帖
全WA求条
186546
lwyznoip楼主2024/7/26 20:38
#include <bits/stdc++.h> 
#define lc id << 1
#define rc id << 1 | 1
#define int long long
#define INF (1ll << 60)

using namespace std;

int n, m;
struct node{
	
	int l, r;
	int add;
	int maxx;
	
} tr[4000005];

void pushup (int id){
	
	tr[id].maxx = max (tr[lc].maxx, tr[rc].maxx);
	
}

void build (int id, int x, int y){
	
	tr[id].l = x;
	tr[id].r = y;
	tr[id].add = 0;
	
	if (x == y) {
		
		tr[id].maxx = 0;
		return;
		
	}
	
	int mid =  (x + y) / 2;
	
	build (lc, x, mid);
	build (rc, mid + 1, y);
	
	pushup (id);
	
}
void pushdown (int id){
	
	if (tr[id].add){
        
        tr[lc].maxx += tr[id].add;
        tr[rc].maxx += tr[id].add;
        tr[lc].add += tr[id].add;
        tr[rc].add += tr[id].add;
        tr[id].add = 0;
        
    }
	
}

void addd (int id, int x, int y, int k){
	
	if (x > tr[id].r || y < tr[id].l) return;
    
    if (x <= tr[id].l && tr[id].r <= y){
        
        tr[id].maxx += k;
        tr[id].add += k;
        return;
        
    }
    
    pushdown (id);
    addd (lc, x, y, k);
    addd (rc, x, y, k);
    pushup (id);
	
}

int query (int id, int x, int y){
    
	if (x > tr[id].r || y < tr[id].l) return -INF;
    
    if (x <= tr[id].l && tr[id].r <= y){
        
        return tr[id].maxx;
        
    }
    pushdown (id);
    return max (query (lc, x, y), query(rc, x, y));
    
}

signed main(){
    
    scanf("%lld%lld", &n, &m);
    
    build (1, 1, n);
    
    while (m --){
    	
    	int op, x, y;
   		scanf("%lld%lld%lld", &op, &x, &y);
		
		if (op == 1){
			
			addd (1, x, y, 1);
			
		}
		
		if (op == 2){
			
			printf("%lld\n", query(1, x, y));
			
		}
    	
	}
    
}
2024/7/26 20:38
加载中...