Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- constexpr int MAX_N {200005};
- int main()
- {
- ios::sync_with_stdio(false);
- int n;
- cin >> n;
- vector<int> a(n);
- map<int, int> f;
- for (int i = 0; i < n; ++i) { cin >> a[i]; f[a[i]]++; }
- vector<pair<int, int>> b(n);
- for (int i = 0; i < n; ++i)
- {
- int t;
- cin >> t;
- b[i] = {t, a[i]};
- }
- sort(begin(b), end(b));
- set<int> available_nums;
- for (int i = 1; i <= 2 * MAX_N; ++i) { available_nums.insert(i); }
- bitset<MAX_N> processed;
- long long ans = 0;
- for (int i = 0; i < n; ++i)
- {
- int t, num;
- tie(t, num) = b[i];
- if (f[num] > 1) { continue; }
- auto it = available_nums.lower_bound(num);
- ans += (*it - num) * (long long) t;
- available_nums.erase(it);
- processed[i] = true;
- }
- for (int i = n - 1; i >= 0; --i)
- {
- if (processed[i]) { continue; }
- int t, num;
- tie(t, num) = b[i];
- auto it = available_nums.lower_bound(num);
- ans += (*it - num) * (long long) t;
- available_nums.erase(it);
- }
- cout << ans << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement