Advertisement
Guest User

Untitled

a guest
Jun 14th, 2015
229
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.49 KB | None | 0 0
  1. #include <iostream>
  2. #include <unordered_map>
  3. #include <vector>
  4. #include <cmath>
  5. #include <ctime>
  6. #include <cassert>
  7. #include <cstdio>
  8. #include <queue>
  9. #include <set>
  10. #include <map>
  11. #include <fstream>
  12. #include <cstdlib>
  13. #include <string>
  14. #include <cstring>
  15. #include <algorithm>
  16. #include <numeric>
  17.  
  18. #define mp make_pair
  19. #define fi first
  20. #define se second
  21. #define pb push_back
  22. #define all(x) (x).begin(), (x).end()
  23. #define rall(x) (x).rbegin(), (x).rend()
  24. #define forn(i, n) for (int i = 0; i < (int)(n); ++i)
  25. #define for1(i, n) for (int i = 1; i <= (int)(n); ++i)
  26. #define ford(i, n) for (int i = (int)(n) - 1; i >= 0; --i)
  27. #define fore(i, a, b) for (int i = (int)(a); i <= (int)(b); ++i)
  28.  
  29. using namespace std;
  30.  
  31. typedef pair<int, int> pii;
  32. typedef vector<int> vi;
  33. typedef vector<vi> vvi;
  34. typedef long long i64;
  35. typedef pair<i64, i64> pi64;
  36. typedef vector<i64> vi64;
  37. typedef vector<vi64> vvi64;
  38.  
  39. template<class T> bool uin(T &a, T b) { return a > b ? (a = b, true) : false; }
  40. template<class T> bool uax(T &a, T b) { return a < b ? (a = b, true) : false; }
  41.  
  42. const int MAXN = 1100000;
  43. int a[MAXN];
  44.  
  45. int main() {
  46.     ios::sync_with_stdio(false);
  47.     cin.tie(nullptr);
  48.     cout.precision(10);
  49.     cout << fixed;
  50. #ifdef LOCAL_DEFINE
  51.     freopen("input.txt", "rt", stdin);
  52. #endif
  53.  
  54.     int N, M, L;
  55.     scanf("%d%d%d", &N, &M, &L);
  56.     forn(i, N) scanf("%d", &a[i]);
  57.     vector<pii> q(M);
  58.     forn(i, M) scanf("%d", &q[i].fi), q[i].se = i;
  59.  
  60.     unordered_map<int, int> ss;
  61.     forn(i, N - 1) {
  62.         int l = a[i + 1] - a[i];
  63.         int x;
  64.         for (x = 1; x * x <= l; ++x) {
  65.             --ss[(l - 1) / x + 1];
  66.         }
  67.         if (x > 1) ss[(l - 1) / (x - 1) + 1] += x - 1;
  68.         --x;
  69.         int d = 1;
  70.         ss[1] += (l - 1);
  71.         for (int d = 1; d < (x ? (l + x - 1) / x : l); ++d) {
  72.             ss[d + 1] -= (l - 1) / d - (d + 1 < (l + x - 1) / x ? (l - 1) / (d + 1) : 0);
  73.         }
  74.     }
  75.     vi ans(M);
  76.     sort(rall(q));
  77.     int qi = 0;
  78.     vector<pii> s(all(ss));
  79.     sort(all(s));
  80.     int i = 0;
  81.     i64 T = 0;
  82.     while (i < s.size()) {
  83.         int j = i;
  84.         while (j < s.size() && s[i].fi == s[j].fi) {
  85.             T += s[j++].se;
  86.         }
  87.         while (qi < q.size() && q[qi].fi >= T) {
  88.             ans[q[qi].se] = s[i].fi;
  89.             ++qi;
  90.         }
  91.         i = j;
  92.     }
  93.     for (int x: ans) printf("%d\n", x);
  94.  
  95. #ifdef LOCAL_DEFINE
  96.     cerr << "Time elapsed: " << 1.0 * clock() / CLOCKS_PER_SEC << " s.\n";
  97. #endif
  98.     return 0;
  99. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement