我使用C++17和C++20AC了,但是再用C++14(GCC9)交就RE了,请问这是为什么。(悬一关)
Code:
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/hash_policy.hpp>
#include <ext/pb_ds/priority_queue.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#define int long long
#define pii pair<int , int>
#define pb emplace_back
#define mkp make_pair
#define fi first
#define se second
#define ls (rt << 1)
#define rs (rt << 1 | 1)
#define mid (l + r >> 1)
using namespace std;
using namespace __gnu_pbds;
int n , a[1000005] , b[1000005];
unsigned int ans;
gp_hash_table <int , int> mp;
vector <int> need;
int find(int x) {
return (mp[x] == 0 ? (mp[x] = (x + 1)) : (mp[x] = find(mp[x])));
}
void solve() {
cin >> n;
for (int i = 1; i <= n; i++) cin >> a[i];
for (int i = 1; i <= n; i++) cin >> b[i];
sort(a + 1 , a + n + 1 , greater<int>());
sort(b + 1 , b + n + 1);
for (int i = 1 , tmp; i <= n; i++) {
tmp = find(a[i]) - a[i] - 1;
if (tmp) need.pb(tmp);
}
sort(need.begin() , need.end() , greater<int>());
for (int i = 0 , j = 1; i < need.size(); i++ , j++) {
ans += 1ull * need[i] * b[j];
}
cout << ans << '\n';
return;
}
signed main() {
ios::sync_with_stdio(0) , cin.tie(0) , cout.tie(0);
int T = 1;
while(T--) solve();
return 0;
}