#include <bits/stdc++.h>
using namespace std;
#define FOR(i,p,q) for(int i=(p); i<=(q); ++i)
#define ROF(i,p,q) for(int i=(p); i>=(q); --i)
#define REP(i,q) for(int i=0; i<(q); ++i)
#define pb push_back
#define as assign
#define rz resize
#define Co const
#define all(X) X.begin(), X.end()
#define rall(X) X.rbegin(), X.rend()
#define sz(X) (int)(X.size())
#define ckmax(a,b) a=max(a,b)
#define ckmin(a,b) a=min(a,b)
#define V vector
typedef long long ll;
typedef mt19937_64 mt;
#ifndef UNCLE
typedef basic_string<bool> vb;
typedef basic_string<int> vi;
typedef basic_string<ll> vl;
#else
typedef V<bool> vb;
typedef V<int> vi;
typedef V<ll> vl;
#endif
int N,M;
struct SS{int v,a,id;};
V<SS> s;
void Input(){
cin>>N>>M;
s.rz(N);
REP(i,N) cin>>s[i].a,s[i].id=i,s[i].v=0;
}
void Solve(){
ROF(i,N-1,0){
sort(s.end()-(N-i-1),s.end(),[](Co SS &a, Co SS &b){if(a.v+a.a!=b.v+b.a) return a.v+a.a<b.v+b.a; return a.id>b.id;});
int sm=0;
ROF(j,i+(N-i-1)/2,i+1) sm+=s[j].a+s[j].v;
if(sm>M){
s[i].v=-s[i].a;
}else{
s[i].v=M-sm;
ROF(j,i+(N-i-1)/2,i+1) s[j].v=s[j].a+s[j].v;
FOR(j,i+(N-i-1)/2+1,N-1) s[j].v=0;
}
}
sort(all(s),[](Co SS &a, Co SS &b){return a.id<b.id;});
for(SS &vv:s) cout<<max(-1,vv.v)<<" ";
cout<<"\n";
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
Input();
Solve();
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | #include <bits/stdc++.h> using namespace std; #define FOR(i,p,q) for(int i=(p); i<=(q); ++i) #define ROF(i,p,q) for(int i=(p); i>=(q); --i) #define REP(i,q) for(int i=0; i<(q); ++i) #define pb push_back #define as assign #define rz resize #define Co const #define all(X) X.begin(), X.end() #define rall(X) X.rbegin(), X.rend() #define sz(X) (int)(X.size()) #define ckmax(a,b) a=max(a,b) #define ckmin(a,b) a=min(a,b) #define V vector typedef long long ll; typedef mt19937_64 mt; #ifndef UNCLE typedef basic_string<bool> vb; typedef basic_string<int> vi; typedef basic_string<ll> vl; #else typedef V<bool> vb; typedef V<int> vi; typedef V<ll> vl; #endif int N,M; struct SS{int v,a,id;}; V<SS> s; void Input(){ cin>>N>>M; s.rz(N); REP(i,N) cin>>s[i].a,s[i].id=i,s[i].v=0; } void Solve(){ ROF(i,N-1,0){ sort(s.end()-(N-i-1),s.end(),[](Co SS &a, Co SS &b){if(a.v+a.a!=b.v+b.a) return a.v+a.a<b.v+b.a; return a.id>b.id;}); int sm=0; ROF(j,i+(N-i-1)/2,i+1) sm+=s[j].a+s[j].v; if(sm>M){ s[i].v=-s[i].a; }else{ s[i].v=M-sm; ROF(j,i+(N-i-1)/2,i+1) s[j].v=s[j].a+s[j].v; FOR(j,i+(N-i-1)/2+1,N-1) s[j].v=0; } } sort(all(s),[](Co SS &a, Co SS &b){return a.id<b.id;}); for(SS &vv:s) cout<<max(-1,vv.v)<<" "; cout<<"\n"; } int main(){ ios_base::sync_with_stdio(0); cin.tie(0), cout.tie(0); Input(); Solve(); } |
English