Submission #916597

# Submission time Handle Problem Language Result Execution time Memory
916597 2024-01-26T06:52:39 Z gaga999 Salesman (IOI09_salesman) C++17
60 / 100
390 ms 30092 KB
#include <cstdio>
#include <stdio.h>
#include <iostream>
#include <math.h>
#include <vector>
#include <queue>
#include <stack>
#include <deque>
#include <algorithm>
#include <utility>
#include <set>
#include <map>
#include <stdlib.h>
#include <cstring>
#include <string.h>
#include <string>
#include <sstream>
#include <assert.h>
#include <climits>
#include <sstream>
#include <numeric>
#include <time.h>
#include <limits.h>
#include <list>
#include <bitset>
#include <unordered_map>
#include <unordered_set>
#include <random>
#include <iomanip>
#include <complex>
#include <chrono>
#include <fstream>
#include <functional>
#include <unistd.h>
// #pragma GCC optimize("Ofast,no-stack-protector")
// #pragma GCC optimize("O3,unroll-loops")
// #pragma GCC target("avx,avx2,bmi,bmi2,lzcnt,popcnt")
#define lowbit(x) ((x) & -(x))
#define ml(a, b) ((1ll * (a) * (b)) % M)
#define tml(a, b) (a) = ((1ll * (a) * (b)) % M)
#define ad(a, b) ((0ll + (a) + (b)) % M)
#define tad(a, b) (a) = ((0ll + (a) + (b)) % M)
#define mi(a, b) ((0ll + M + (a) - (b)) % M)
#define tmi(a, b) (a) = ((0ll + M + (a) - (b)) % M)
#define tmin(a, b) (a) = min((a), (b))
#define tmax(a, b) (a) = max((a), (b))
#define iter(a) (a).begin(), (a).end()
#define riter(a) (a).rbegin(), (a).rend()
#define init(a, b) memset((a), (b), sizeof(a))
#define cpy(a, b) memcpy((a), (b), sizeof(a))
#define uni(a) a.resize(unique(iter(a)) - a.begin())
#define pb emplace_back
#define mpr make_pair
#define ls(i) ((i) << 1)
#define rs(i) ((i) << 1 | 1)
#define INF 0x3f3f3f3f
#define NIF 0xc0c0c0c0
#define eps 1e-9
#define F first
#define S second
#define AC cin.tie(0)->sync_with_stdio(0)
using namespace std;
typedef long long llt;
typedef pair<int, int> pii;
typedef pair<double, double> pdd;
typedef pair<llt, llt> pll;
typedef complex<double> cd;
// const int M = 998244353;

// random_device rm;
// mt19937 rg(rm());
// default_random_engine rg(rm());
// uniform_int_distribution<int> rd(INT_MIN, INT_MAX);
// uniform_real_distribution<double> rd(0, M_PI);

void db() { cerr << "\n"; }
template <class T, class... U>
void db(T a, U... b) { cerr << a << " ", db(b...); }

inline char gc()
{
    const static int SZ = 1 << 16;
    static char buf[SZ], *p1, *p2;
    if (p1 == p2 && (p2 = buf + fread(p1 = buf, 1, SZ, stdin), p1 == p2))
        return -1;
    return *p1++;
}
void rd() {}
template <typename T, typename... U>
void rd(T &x, U &...y)
{
    x = 0;
    bool f = 0;
    char c = gc();
    while (!isdigit(c))
        f ^= !(c ^ 45), c = gc();
    while (isdigit(c))
        x = (x << 1) + (x << 3) + (c ^ 48), c = gc();
    f && (x = -x), rd(y...);
}

template <typename T>
void prt(T x)
{
    if (x < 0)
        putchar('-'), x = -x;
    if (x > 9)
        prt(x / 10);
    putchar((x % 10) ^ 48);
}

const int N = 5e5 + 5;
int U, D;
vector<pii> qs[N];

struct P : map<int, int>
{
    inline int gv(int p)
    {
        int res = -INF;
        auto it = upper_bound(p);
        if (it != begin())
            it = prev(it), tmax(res, it->S - D * (p - it->F));
        it = lower_bound(p);
        if (it != end())
            tmax(res, it->S - U * (it->F - p));
        return res;
    }
    void Insert(int p, int v)
    {
        if (gv(p) >= v)
            return;
        auto it = insert(mpr(p, v)).F;
        while (it != begin())
        {
            auto ii = prev(it);
            if (ii->S > it->S - U * (it->F - ii->F))
                break;
            erase(ii);
        }
        auto ii = next(it);
        while (ii != end())
        {
            if (ii->S > it->S - D * (ii->F - it->F))
                break;
            erase(ii), ii = next(it);
        }
    }
} st;

signed main()
{
    int n, s;
    rd(n, U, D, s), st.Insert(s, 0);
    for (int i = 0; i < n; i++)
    {
        int t;
        rd(t), qs[t].pb();
        rd(qs[t].back().F, qs[t].back().S);
    }
    for (int t = 0; t < N; t++)
    {
        if (qs[t].empty())
            continue;
        // if (qs[t].size() == 1)
        // {
        //     st.Insert(qs[t][0].F, st.gv(qs[t][0].F) + qs[t][0].S);
        //     continue;
        // }
        vector<pii> &v = qs[t];
        sort(iter(v));
        int ln = v.size();
        vector<int> v1(ln), v2(ln);
        for (int i = 0; i < ln; i++)
            v1[i] = v2[i] = st.gv(v[i].F) + v[i].S;
        for (int i = 1; i < ln; i++)
            tmax(v1[i], v1[i - 1] - D * (v[i].F - v[i - 1].F));
        for (int i = ln - 2; i >= 0; i--)
            tmax(v2[i], v2[i + 1] - U * (v[i + 1].F - v[i].F));
        for (int i = 0; i < ln; i++)
            st.Insert(v[i].F, max(v1[i], v2[i]));
    }
    prt(st.gv(s)), putchar('\n');
}
# Verdict Execution time Memory Grader output
1 Correct 4 ms 12120 KB Output is correct
2 Correct 4 ms 12120 KB Output is correct
3 Correct 4 ms 12120 KB Output is correct
4 Correct 5 ms 12124 KB Output is correct
5 Correct 6 ms 12376 KB Output is correct
6 Correct 10 ms 12888 KB Output is correct
7 Correct 26 ms 13660 KB Output is correct
8 Correct 46 ms 15196 KB Output is correct
9 Correct 95 ms 16972 KB Output is correct
10 Correct 172 ms 22788 KB Output is correct
11 Correct 153 ms 21584 KB Output is correct
12 Correct 266 ms 24832 KB Output is correct
13 Correct 302 ms 24928 KB Output is correct
14 Correct 259 ms 27760 KB Output is correct
15 Correct 390 ms 30092 KB Output is correct
16 Correct 361 ms 27972 KB Output is correct
17 Incorrect 5 ms 12120 KB Output isn't correct
18 Incorrect 4 ms 12124 KB Output isn't correct
19 Incorrect 4 ms 12120 KB Output isn't correct
20 Incorrect 4 ms 12124 KB Output isn't correct
21 Incorrect 6 ms 12124 KB Output isn't correct
22 Incorrect 5 ms 12124 KB Output isn't correct
23 Incorrect 5 ms 12120 KB Output isn't correct
24 Incorrect 6 ms 12124 KB Output isn't correct
25 Incorrect 17 ms 13092 KB Output isn't correct
26 Incorrect 51 ms 14552 KB Output isn't correct
27 Incorrect 67 ms 16252 KB Output isn't correct
28 Incorrect 164 ms 16828 KB Output isn't correct
29 Incorrect 97 ms 16980 KB Output isn't correct
30 Incorrect 113 ms 17968 KB Output isn't correct