MnZn求调
查看原帖
MnZn求调
323849
kkksc03wzl楼主2023/12/2 12:33

16pts求调

#include<iostream>
#include<cstdio>
#include<algorithm>
#define ll long long
#define lson rt<<1
#define rson rt<<1|1
#include<cmath>
#define PI acos(-1)
using namespace std;
struct task{
	int l,r;
	long long v;
}a[100005];
int num[200005];
bool cmp(task a,task b){
	return a.r<b.r;
}
struct node{
	ll lazy,mx;
}tr[800005];
void pushup(int rt){
	tr[rt].mx=max(tr[lson].mx,tr[rson].mx);
}void pushdown(int rt){
	if(tr[rt].lazy){
		ll k=tr[rt].lazy;
		tr[rt].lazy=0;
		tr[lson].lazy+=k;
		tr[rson].lazy+=k;
		tr[lson].mx+=k;
		tr[rson].mx+=k;
	}
}void update(int rt,int l,int r,int x,int y,ll k){
	if(l>y||r<x){return ;}
	if(x<=l&&r<=y){
		tr[rt].mx+=k;
		tr[rt].lazy+=k;
		return;
	}int mid=(l+r)>>1;
	pushdown(rt);
	update(lson,l,mid,x,y,k);
	update(rson,mid+1,r,x,y,k); 
	pushup(rt);
}ll query(int rt,int l,int r,int x,int y){
	if(l>y||r<x){return 0;}
	if(x<=l&&r<=y){
		return tr[rt].mx;
	}int mid=(l+r)>>1;
	pushdown(rt);
	return max(query(lson,l,mid,x,y),query(rson,mid+1,r,x,y));
}
int ha(int x){
	return lower_bound(num+1,num+1+num[0],x)-num;
}
int main(){
//	printf("%lf\n",tan(30*PI/180));
	freopen("run2.in","r",stdin);
//	freopen("run.out","w",stdout);
	int c,t;
	scanf("%d%d",&c,&t);
	while(t--){
		num[0]=0;
		int n,m,k,d;
		scanf("%d%d%d%d",&n,&m,&k,&d);
		int c=0;
		for(int i=1; i<=m; i++){
			int x,y;
			ll z;
			scanf("%d%d%lld",&x,&y,&z);
			c++;
			a[c].l=x-y+1;
			num[++num[0]]=a[c].l-1;
			a[c].r=x;
			num[++num[0]]=a[c].r+1;
			a[c].v=z;
		}sort(num+1,num+1+num[0]);
		m=c;
		sort(a+1,a+1+m,cmp);
		num[0]=unique(num+1,num+1+num[0])-num-1;
		for(int i=1; i<=800000; i++)tr[i].lazy=tr[i].mx=0;
		ll ans=0;
		int pos=1;
		for(int i=1; i<=num[0]; i++){
			if(num[i]==0){continue;}
			for(int j=pos; j<=m; j++){
				if(a[j].r>num[i]-1){
					pos=j;
					break;
				}
				update(1,1,num[0],1,ha(a[j].l-1),a[j].v);
			}
			ll g=query(1,1,num[0],ha(num[i]-k-1),ha(num[i]-1))+d;
			update(1,1,num[0],i,i,g);
			ans=max(ans,g-num[i]*1ll*d);
		}printf("%lld\n",ans);
	}
	return 0;
} 
2023/12/2 12:33
加载中...