求助,24pts
查看原帖
求助,24pts
671925
caotianhao楼主2023/10/2 17:47

rt

#include<bits/stdc++.h>
using namespace std;
const int N=100005; 
int C,S,R;
struct ST{
	int l,r;
	int num;
	int la;
}t[N*4];
void build(int node,int l,int r){
	int mid=(l+r)/2;
	t[node].l=l;
	t[node].r=r;
	if(l==r){
		return ;
	} 
	build(node*2,l,mid);
	build(node*2+1,mid+1,r);
}
void pd(int node){
	if(t[node].la!=0){
        t[node*2].la+=t[node].la;
        t[node*2+1].la+=t[node].la;
        int mid=(t[node].l+t[node].r)/2;
        t[node*2].num+=t[node].la*(mid-t[node*2].l+1);
        t[node*2+1].num+=t[node].la*(t[node*2+1].r-mid);
        t[node].la=0;
    }
}
void add(int l,int r,int k,int node){
	if(t[node].r<=r&&t[node].l>=l){
		t[node].num+=k;
		t[node].la+=k;
		return ;
	}
	pd(node);
    if(t[node*2].r>=l){
    	add(l,r,k,node*2);
	}
	if(t[node*2+1].l<=r){
		add(l,r,k,node*2+1);
	}
	t[node].num=max(t[node*2].num,t[node*2+1].num);
}
int query(int node,int l,int r){
	if(t[node].l>r||t[node].r<l){
		return INT_MIN;
	}
	if(t[node].r<=r&&t[node].l>=l){
		return t[node].num;
	}
	pd(node);
	return max(query(node*2,l,r),query(node*2+1,l,r));
}
int main(){
	cin>>C>>S>>R;
	build(1,1,C);
	while(R--){
		int o,d,n;
		cin>>o>>d>>n;
		d--;
		if(n+query(1,o,d)>S){
			cout<<"N\n";
		}else{
			add(o,d,n,1);
			cout<<"T\n";
		}
		//cout<<query(1,o,d)<<"\n";
	}
	return 0;
}
2023/10/2 17:47
加载中...