Submission #228819

#TimeUsernameProblemLanguageResultExecution timeMemory
228819osaaateiasavtnlSalesman (IOI09_salesman)C++14
17 / 100
3089 ms52588 KiB
#include<bits/stdc++.h> using namespace std; #define int long long #define ii pair <int, int> #define app push_back #define all(a) a.begin(), a.end() #define bp __builtin_popcount #define ll long long #define mp make_pair #define f first #define s second #define Time (double)clock()/CLOCKS_PER_SEC const int N = 5e5 + 7; const int INF = 1e18; /* struct Fen { int f[N]; void init() { for (int i = 0; i < N; ++i) f[i] = -INF; } void add(int i, int x) { for (; i < N; i |= i + 1) f[i] = max(f[i], x); } int get(int i) { int ans = -INF; for (; i >= 0; i &= i + 1, --i) ans = max(ans, f[i]); return ans; } } l, r; // l - relax from l, r - relax from r */ int n, U, D, S; struct Fair { int day, pos, cost; } a[N]; int dp[N]; bool comp(Fair a, Fair b) { return a.day < b.day; } signed main() { #ifdef HOME freopen("input.txt", "r", stdin); #else #define endl '\n' ios_base::sync_with_stdio(0); cin.tie(0); #endif cin >> n >> U >> D >> S; set <int> ms; for (int i = 1; i <= n; ++i) { cin >> a[i].day >> a[i].pos >> a[i].cost; ms.insert(a[i].day); } if (ms.size() < n) { exit(1); } for (int i = 0; i < N; ++i) dp[i] = -INF; dp[S] = 0; sort(a + 1, a + n + 1, comp); vector <int> c = {S}; for (int i = 1; i <= n; ++i) c.app(a[i].pos); sort(all(c)); c.resize(unique(all(c)) - c.begin()); for (int i = 1; i <= n; ++i) { int nn = -INF; for (int x : c) { if (dp[x] != -INF) { if (x < a[i].pos) nn = max(nn, dp[x] - (a[i].pos - x) * D + a[i].cost); else nn = max(nn, dp[x] - (x - a[i].pos) * U + a[i].cost); } } dp[a[i].pos] = max(dp[a[i].pos], nn); } int ans = 0; for (int i = 0; i <= S; ++i) ans = max(ans, dp[i] - D * (S - i)); for (int i = S; i < N; ++i) ans = max(ans, dp[i] - U * (i - S)); cout << ans << endl; }

Compilation message (stderr)

salesman.cpp: In function 'int main()':
salesman.cpp:61:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     if (ms.size() < n) {
         ~~~~~~~~~~^~~
#Verdict Execution timeMemoryGrader output
Fetching results...