#include <bits/stdc++.h>
using namespace std;
#ifdef LOCAL
#include "debug.h"
#else
#define debug(...) 42
#endif
using ll=long long;
using pii=array<int,2>;
using tii=array<int,3>;
const int N=5e5+5;
int n,s;
tii a[N];
ll U,D,S[N],d[N],dp[N];
struct Seg{
ll F[N]={0};
void init(){
for(int i=1;i<=500001;i++) F[i]=-1e18;
}
void upd(int i,ll v){
for(;i<=500001;i+=i&-i) F[i]=max(F[i],v);
}
ll qry(int i){
ll r=-1e18;
for(;i;i-=i&-i) r=max(r,F[i]);
return r;
}
}T1,T2;
int main(){
ios::sync_with_stdio(false); cin.tie(0);
cin>>n>>U>>D>>s;
for(int i=1;i<=n;i++) cin>>a[i][0]>>a[i][1]>>a[i][2];
sort(a+1,a+1+n);
a[++n]={1000000000,s,0};
T1.init(); T2.init();
T1.upd(s,D*s); T2.upd(500002-s,-U*s);
for(int l=1;l<=n;l++){
int r=l;
while(r+1<=n&&a[l][0]==a[r+1][0]) r++;
ll mx=-1e18;
S[l-1]=0;
for(int i=l;i<=r;i++) S[i]=S[i-1]+a[i][2];
for(int i=l;i<=r;i++) d[i]=max(T1.qry(a[i][1])-D*a[i][1],T2.qry(500002-a[i][1])+U*a[i][1]);
for(int i=r;i>=l;i--){
mx=max(mx,d[i]-U*a[i][1]+S[i]);
dp[i]=mx+U*a[i][1]-S[i-1];
debug(i,dp[i]);
}
mx=-1e18;
for(int i=l;i<=r;i++){
mx=max(mx,d[i]+D*a[i][1]-S[i-1]);
dp[i]=max(dp[i],mx-D*a[i][1]+S[i]);
}
for(int i=l;i<=r;i++){
T1.upd(a[i][1],dp[i]+D*a[i][1]);
T2.upd(500002-a[i][1],dp[i]-U*a[i][1]);
}
assert(l==r);
l=r;
}
cout<<dp[n];
return 0;
}
Compilation message
salesman.cpp: In function 'int main()':
salesman.cpp:6:20: warning: statement has no effect [-Wunused-value]
6 | #define debug(...) 42
| ^~
salesman.cpp:47:4: note: in expansion of macro 'debug'
47 | debug(i,dp[i]);
| ^~~~~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
2 ms |
14936 KB |
Output is correct |
2 |
Correct |
2 ms |
14940 KB |
Output is correct |
3 |
Correct |
2 ms |
14940 KB |
Output is correct |
4 |
Correct |
3 ms |
14936 KB |
Output is correct |
5 |
Correct |
4 ms |
14940 KB |
Output is correct |
6 |
Correct |
9 ms |
14940 KB |
Output is correct |
7 |
Correct |
26 ms |
14800 KB |
Output is correct |
8 |
Correct |
38 ms |
21076 KB |
Output is correct |
9 |
Correct |
55 ms |
22992 KB |
Output is correct |
10 |
Correct |
107 ms |
25176 KB |
Output is correct |
11 |
Correct |
114 ms |
25168 KB |
Output is correct |
12 |
Correct |
150 ms |
25244 KB |
Output is correct |
13 |
Correct |
144 ms |
25168 KB |
Output is correct |
14 |
Correct |
187 ms |
25684 KB |
Output is correct |
15 |
Correct |
182 ms |
25664 KB |
Output is correct |
16 |
Correct |
182 ms |
25668 KB |
Output is correct |
17 |
Runtime error |
14 ms |
30040 KB |
Execution killed with signal 6 |
18 |
Runtime error |
14 ms |
30044 KB |
Execution killed with signal 6 |
19 |
Runtime error |
14 ms |
30044 KB |
Execution killed with signal 6 |
20 |
Runtime error |
14 ms |
29900 KB |
Execution killed with signal 6 |
21 |
Runtime error |
14 ms |
30044 KB |
Execution killed with signal 6 |
22 |
Runtime error |
17 ms |
30044 KB |
Execution killed with signal 6 |
23 |
Runtime error |
15 ms |
30044 KB |
Execution killed with signal 6 |
24 |
Runtime error |
16 ms |
30044 KB |
Execution killed with signal 6 |
25 |
Runtime error |
42 ms |
34172 KB |
Execution killed with signal 6 |
26 |
Runtime error |
69 ms |
34132 KB |
Execution killed with signal 6 |
27 |
Runtime error |
110 ms |
38224 KB |
Execution killed with signal 6 |
28 |
Runtime error |
115 ms |
38228 KB |
Execution killed with signal 6 |
29 |
Runtime error |
156 ms |
39488 KB |
Execution killed with signal 6 |
30 |
Runtime error |
156 ms |
39508 KB |
Execution killed with signal 6 |