제출 #945497

#제출 시각아이디문제언어결과실행 시간메모리
945497MilosMilutinovicAnts and Sugar (JOI22_sugar)C++14
6 / 100
4075 ms24948 KiB
#include<bits/stdc++.h>
 
#define pb push_back
#define fi first
#define se second
#define mp make_pair
 
using namespace std;
 
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
typedef long double ld;
 
template <typename T> bool chkmin(T &x,T y){return x>y?x=y,1:0;}
template <typename T> bool chkmax(T &x,T y){return x<y?x=y,1:0;}
 
ll readint(){
	ll x=0,f=1; char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
	while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
	return x*f;
}

int q,l,k;
int t[500005],x[500005],a[500005];
ll b[1500005][2],sum;
vector<int> xs;

ll solve(){
	ll mx=0,mx0=-1e18,mx1=0;
	for(int i=0;i<k;i++){
		ll pmx0=mx0,pmx1=mx1;
		mx0=max(pmx0,pmx1-b[i][0]);
		mx1=max(pmx1,pmx0+b[i][1]);
		mx=max(mx,mx1);
	}
	return sum-mx;
}

int main(){
	q=readint(); l=readint();
	for(int i=1;i<=q;i++){
		t[i]=readint(); x[i]=readint(); a[i]=readint();
	}
	for(int i=1;i<=q;i++){
		xs.pb(x[i]);
		xs.pb(x[i]-l);
		xs.pb(x[i]+l);
	}
	xs.pb((int)-1.00001e9);
	sort(xs.begin(),xs.end());
	xs.erase(unique(xs.begin(),xs.end()),xs.end());
	k=(int)xs.size();
	for(int i=1;i<=q;i++){
		if(t[i]==1){
			int idx=(int)(lower_bound(xs.begin(),xs.end(),x[i])-xs.begin());
			for(int j=idx;j<k;j++) b[j][0]+=a[i];
			for(int j=idx;j<k;j++) b[j][1]+=a[i];
			sum+=a[i];
		}else{
			int idx=(int)(lower_bound(xs.begin(),xs.end(),x[i]+l)-xs.begin());
			for(int j=idx;j<k;j++) b[j][0]-=a[i];
			idx=(int)(lower_bound(xs.begin(),xs.end(),x[i]-l)-xs.begin());
			for(int j=idx;j<k;j++) b[j][1]-=a[i];
		}
		printf("%lld\n",solve());
	}
	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...