Submission #1045810

# Submission time Handle Problem Language Result Execution time Memory
1045810 2024-08-06T07:52:44 Z Whisper Road Construction (JOI21_road_construction) C++17
6 / 100
10000 ms 12500 KB
#include <bits/stdc++.h>

using namespace std;
using ll = long long;

#define int long long
#define FOR(i, a, b) for (int i = (a); i <= (b); i++)
#define FORD(i, a, b) for (int i = (b); i >= (a); i --)
#define REP(i, a) for (int i = 0; i < (a); ++i)
#define REPD(i, a) for (int i = (a) - 1; i >= 0; --i)

#define MASK(i) (1LL << (i))
#define BIT(x, i) (((x) >> (i)) & 1)


constexpr ll LINF = (1ll << 60);
constexpr int INF = (1ll << 30);
constexpr int Mod = 1e9 + 7;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());

/*
    Phu Trong from Nguyen Tat Thanh High School for gifted student
*/

template <class X, class Y>
    bool minimize(X &x, const Y &y){
        X eps = 1e-9;
        if (x > y + eps) {x = y; return 1;}
        return 0;
    }

template <class X, class Y>
    bool maximize(X &x, const Y &y){
        X eps = 1e-9;
        if (x + eps < y) {x = y; return 1;}
        return 0;
    }
#define MAX             250005
int N, K;

pair<int, int> A[MAX];

int ans[MAX];
void process(void){
    cin >> N >> K;
    for (int i = 1; i <= N; ++i){
        int x, y;
        cin >> x >> y;
        A[i] = make_pair(x + y, x - y);
    }
    sort(A + 1, A + N + 1);
    /*
        After rotating the plane by 45 degree, the Manhattan distance becomes Chebyshev distance instead
        Chebyshev between two point A(x1, y1) and B(x2, y2) is max(|x2 - x1|, |y2 - y1|)
    */

    auto check = [&](int x) -> bool{
        multiset<int> mySet;

        int j = 1, cnt = 0;
        for (int i = 1; i <= N; ++i){
            while (j <= N && A[i].first - A[j].first > x){
                mySet.erase(mySet.find(A[j].second));
                ++j;
            }

            auto it = mySet.lower_bound(A[j].second - x);
            for (; it != mySet.end(); ++it){
                if ((*it) > A[j].second + x) break;
                ++cnt;
                if (cnt > K) return false;
            }
            mySet.insert(A[i].second);
        }
        return true;
    };
    int l = -1, r = 4e9 + 1;
    while (r - l > 1){
        int m = (l + r) >> 1;
        if(check(m)) l = m;
        else r = m;
    }

    multiset<pair<int, int>> mySet;

    int j = 1;

    vector<int> res;

    for (int i = 1; i <= N; ++i){
        while (j <= N && A[i].first - A[j].first > l) {
            mySet.erase(mySet.find(make_pair(A[j].second, A[j].first)));
            ++j;
        }
        auto it = mySet.lower_bound(make_pair(A[i].second - l, -INF));
        for (; it != mySet.end(); ++it){
            if ((*it).first > A[i].second + l) break;

            int dis = max(abs(A[i].first - (*it).second), abs(A[i].second - (*it).first));
            res.emplace_back(dis);
            assert((int)res.size() <= K);
        }
        mySet.insert(make_pair(A[i].second, A[i].first));
    }
    sort(res.begin(), res.end());
    for  (auto&i : res) cout << i << "\n";
    for (int i = 0; i < K - (int)res.size(); ++i) cout << l + 1 << "\n";
}
signed main(){
    #define name "Whisper"
    cin.tie(nullptr) -> sync_with_stdio(false);
    //freopen(name".inp", "r", stdin);
    //freopen(name".out", "w", stdout);
    process();
    return (0 ^ 0);
}




# Verdict Execution time Memory Grader output
1 Incorrect 54 ms 7024 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 182 ms 9728 KB Output is correct
2 Correct 185 ms 12496 KB Output is correct
3 Correct 48 ms 7016 KB Output is correct
4 Correct 146 ms 12244 KB Output is correct
5 Correct 131 ms 12248 KB Output is correct
6 Correct 126 ms 12500 KB Output is correct
7 Correct 136 ms 11844 KB Output is correct
# Verdict Execution time Memory Grader output
1 Execution timed out 10022 ms 6992 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 10022 ms 6992 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 54 ms 7024 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 54 ms 7024 KB Output isn't correct
2 Halted 0 ms 0 KB -