Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <unordered_map>
- #include <vector>
- #include <cmath>
- #include <ctime>
- #include <cassert>
- #include <cstdio>
- #include <queue>
- #include <set>
- #include <map>
- #include <fstream>
- #include <cstdlib>
- #include <string>
- #include <cstring>
- #include <algorithm>
- #include <numeric>
- #define mp make_pair
- #define fi first
- #define se second
- #define pb push_back
- #define all(x) (x).begin(), (x).end()
- #define rall(x) (x).rbegin(), (x).rend()
- #define forn(i, n) for (int i = 0; i < (int)(n); ++i)
- #define for1(i, n) for (int i = 1; i <= (int)(n); ++i)
- #define ford(i, n) for (int i = (int)(n) - 1; i >= 0; --i)
- #define fore(i, a, b) for (int i = (int)(a); i <= (int)(b); ++i)
- using namespace std;
- typedef pair<int, int> pii;
- typedef vector<int> vi;
- typedef vector<vi> vvi;
- typedef long long i64;
- typedef pair<i64, i64> pi64;
- typedef vector<i64> vi64;
- typedef vector<vi64> vvi64;
- template<class T> bool uin(T &a, T b) { return a > b ? (a = b, true) : false; }
- template<class T> bool uax(T &a, T b) { return a < b ? (a = b, true) : false; }
- const int MAXN = 1100000;
- int a[MAXN];
- int main() {
- ios::sync_with_stdio(false);
- cin.tie(nullptr);
- cout.precision(10);
- cout << fixed;
- #ifdef LOCAL_DEFINE
- freopen("input.txt", "rt", stdin);
- #endif
- int N, M, L;
- scanf("%d%d%d", &N, &M, &L);
- forn(i, N) scanf("%d", &a[i]);
- vector<pii> q(M);
- forn(i, M) scanf("%d", &q[i].fi), q[i].se = i;
- unordered_map<int, int> ss;
- forn(i, N - 1) {
- int l = a[i + 1] - a[i];
- int x;
- for (x = 1; x * x <= l; ++x) {
- --ss[(l - 1) / x + 1];
- }
- if (x > 1) ss[(l - 1) / (x - 1) + 1] += x - 1;
- --x;
- int d = 1;
- ss[1] += (l - 1);
- for (int d = 1; d < (x ? (l + x - 1) / x : l); ++d) {
- ss[d + 1] -= (l - 1) / d - (d + 1 < (l + x - 1) / x ? (l - 1) / (d + 1) : 0);
- }
- }
- vi ans(M);
- sort(rall(q));
- int qi = 0;
- vector<pii> s(all(ss));
- sort(all(s));
- int i = 0;
- i64 T = 0;
- while (i < s.size()) {
- int j = i;
- while (j < s.size() && s[i].fi == s[j].fi) {
- T += s[j++].se;
- }
- while (qi < q.size() && q[qi].fi >= T) {
- ans[q[qi].se] = s[i].fi;
- ++qi;
- }
- i = j;
- }
- for (int x: ans) printf("%d\n", x);
- #ifdef LOCAL_DEFINE
- cerr << "Time elapsed: " << 1.0 * clock() / CLOCKS_PER_SEC << " s.\n";
- #endif
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement