제출 #1152812

#제출 시각아이디문제언어결과실행 시간메모리
1152812khangrlSnowball (JOI21_ho_t2)C++20
33 / 100
214 ms17712 KiB
#include<bits/stdc++.h>
#define ff first
#define ss second
#define pb push_back
#define int long long 
using namespace std;
int n, q, last=0;
vector <pair <int, int> > dist;
signed main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin>>n>>q;
	for(int i=0; i<n; i++){
		int a;
		cin>>a;
		if(i==0){
			last=a;
			continue ;
		}
		dist.pb({a-last, i-1});
		last=a;
	}
	sort(dist.begin(), dist.end());
	map<int,int>ans;
	int mn=0, mx=0, sum=0, j=0;
    for(int i=1; i<=q; i++){
		int a;
		cin>>a;
		if(a==0){
			continue ;
		}
		sum+=a;
		int mn1=min(mn, sum), mx1=max(mx, sum);
		while(dist[j].ff<=mx1-mn1 and j<n-1){
			ans[dist[j].ss]+=mx;
			ans[dist[j].ss+1]+=abs(mn);
			int diff=dist[j].ff-(mx-mn);
			if(mn1==mn){
				ans[dist[j].ss]+=diff;
			}
			else{
				ans[dist[j].ss+1]+=diff;
			}
		    j++;
		    if(j==n-1)break;
		}
		mn=min(mn, sum);
		mx=max(mx, sum);
	}
    while(j<n-1){
        ans[dist[j].ss]+=mx;
        ans[dist[j].ss+1]+=abs(mn);
        j++;
    }
	ans[0]+=abs(mn);
	ans[n-1]+=mx;
	for(int i=0; i<n; i++){
		cout<<ans[i]<<"\n";
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...