제출 #1243489

#제출 시각아이디문제언어결과실행 시간메모리
1243489meisgoodSalesman (IOI09_salesman)C++20
100 / 100
1105 ms59120 KiB
#include <bits/stdc++.h> using namespace std; #define int long long vector <pair<int,int>> v[500003] ; struct segt { int seg[2000003] ; void build(){ for (int i = 0 ; i < 2000003 ; i ++) seg[i]=-LLONG_MAX/4 ; } void upd(int id,int l,int r,int x,int v){ if (l==r&&l==x) seg[id]=max(seg[id],v) ; else if (l>x||r<x) ; else { int md=(l+r)/2 ; upd(id*2,l,md,x,v) ; upd(id*2+1,md+1,r,x,v) ; seg[id]=max(seg[id*2],seg[id*2+1]) ; } } int qq(int id,int l,int r,int ql,int qr){ if (ql<=l&&r<=qr) return seg[id] ; else if (l>qr||r<ql) return -LLONG_MAX/4 ; else { int md=(l+r)/2 ; return max(qq(id*2,l,md,ql,qr),qq(id*2+1,md+1,r,ql,qr)) ; } } } ; const int m=500001 ; signed main() { int n,u,d,s,i,j ; cin >> n >> u >> d >> s ; u=-u,d=-d ; for (i = 0 ; i < n ; i ++){ int a,b,c ; cin >> a >> b >> c ; v[a].push_back({b,c}) ; } v[500001].push_back({s,0}) ; segt ups,dos ; ups.build() ; dos.build() ; ups.upd(1,1,m,s,d*(m-s)) ; dos.upd(1,1,m,s,u*s) ; for (i = 1 ; i <= 500001 ; i ++){ if (v[i].size()==0) ; // else if (v[i].size()==1){ // } else { sort(v[i].begin(),v[i].end(),greater<pair<int,int>>()) ; int mx=-LLONG_MAX/4 ; vector <pair<int,int>> vvv ; int nw=0 ; for (auto [a,b] : v[i]){ mx=max(mx,ups.qq(1,1,m,1,a)-d*(m-a)+u*a-nw) ; mx=max(mx,dos.qq(1,1,m,a,m)-u*a+u*a-nw) ; nw+=b ; vvv.push_back({a,mx-u*a+nw}) ; } reverse(v[i].begin(),v[i].end()) ; mx=-LLONG_MAX/4 ; vector <pair<int,int>> vvv2 ; nw=0 ; for (auto [a,b] : v[i]){ mx=max(mx,dos.qq(1,1,m,a,m)-u*a+d*(m-a)-nw) ; mx=max(mx,ups.qq(1,1,m,1,a)-d*(m-a)+d*(m-a)-nw) ; nw+=b ; // cout << mx << endl ; vvv2.push_back({a,mx-d*(m-a)+nw}) ; } for (auto [a,b] : vvv){ ups.upd(1,1,m,a,b+d*(m-a)) ; dos.upd(1,1,m,a,b+u*a) ; } for (auto [a,b] : vvv2){ ups.upd(1,1,m,a,b+d*(m-a)) ; dos.upd(1,1,m,a,b+u*a) ; } // for (auto [a,b] : v[i]) cout << ups.qq(1,1,m,a,a)-d*(m-a) << " " ; cout << endl ; } } cout << ups.qq(1,1,m,s,s)-d*(m-s) << endl ; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...