Skip to content

nazmulchowdhury53/Codeforce

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

#include #include #include #include

using namespace std;

typedef long long ll;

class DamageSolver { private: int n, m_int, k; vector h, x;

struct Event {
    ll pos;
    int type;
};

bool canAchieveDamage(ll mid) {
    vector<Event> events;

    for (int i = 0; i < n; ++i) {
        ll required_damage = (h[i] + mid - 1) / mid;
        if (required_damage > m_int) {
            continue;
        }

        ll delta = m_int - required_damage;
        ll left = x[i] - delta;
        ll right = x[i] + delta;
        events.push_back({left, 1});
        events.push_back({right + 1, -1});
    }

    if (events.empty()) {
        return false;
    }


    sort(events.begin(), events.end(), [](const Event &a, const Event &b) {
        if (a.pos != b.pos) return a.pos < b.pos;
        return a.type > b.type;
    });

    ll cnt = 0;
    for (size_t i = 0; i < events.size(); ++i) {
        cnt += events[i].type;

        if (i + 1 < events.size() && events[i].pos == events[i + 1].pos)
            continue;


        if (cnt >= k) {
            return true;
        }
    }

    return false;
}

public: DamageSolver(int n, int m_int, int k, const vector& h, const vector& x) : n(n), m_int(m_int), k(k), h(h), x(x) {}

ll findMinimumDamage() {
    ll low = 1, high = 1e9;
    ll answer = -1;


    while (low <= high) {
        ll mid = (low + high) / 2;
        if (canAchieveDamage(mid)) {
            answer = mid;
            high = mid - 1;
        } else {
            low = mid + 1;
        }
    }

    return answer;
}

};

int main() { ios::sync_with_stdio(false); cin.tie(nullptr);

int t;
cin >> t;
while (t--) {
    int n, m_int, k;
    cin >> n >> m_int >> k;
    vector<ll> h(n), x(n);

    for (int i = 0; i < n; ++i) {
        cin >> h[i];
    }
    for (int i = 0; i < n; ++i) {
        cin >> x[i];
    }


    DamageSolver solver(n, m_int, k, h, x);


    cout << solver.findMinimumDamage() << '\n';
}

return 0;

}

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages