Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #pragma GCC optimize("O3")
- #pragma GCC optimize("Ofast")
- #include <bits/stdc++.h>
- #include <ext/pb_ds/assoc_container.hpp>
- #ifdef Local
- #include "debug/debug.h"
- #else
- #define debug(...)
- #endif
- typedef long long ll;
- typedef long double ld;
- #define int ll
- #define vec vector
- #define str string
- #define all(x) (x).begin(), (x).end()
- #define rall(x) (x).rbegin(), (x).rend()
- #define rev(x) reverse(x)
- #define sz(x) (int)(x).size()
- #define pb push_back
- using namespace std;
- using namespace __gnu_pbds;
- void solve() {
- int n, q;
- cin >> n >> q;
- vec<int> a(n);
- gp_hash_table<int, int> cnt;
- for (int& i : a) {
- cin >> i;
- cnt[i]++;
- }
- gp_hash_table<int, vec<int>> c;
- for (auto& [k, i] : cnt) {
- c[i].pb(k);
- }
- for (auto& [k, i] : c) {
- sort(rall(i));
- }
- gp_hash_table<int, int> qs;
- auto h = [&](int& a, int& b) { return min(a, b) << 30 | max(a, b); };
- for (int i = 0, x, y; i < q; i++) {
- cin >> x >> y;
- qs[h(x, y)] = 1;
- }
- int ans = 0;
- for (int i = 0; i < sz(a); i++) {
- int x = a[i], g = cnt[x];
- for (auto& [k, j] : c) {
- if (k < g)
- continue;
- for (int& y : j) {
- if (x != y && qs.find(h(x, y)) == qs.end()) {
- ans = max(ans, (cnt[x] + cnt[y]) * (x + y));
- break;
- }
- }
- }
- }
- cout << ans << '\n';
- }
- signed main() {
- ios::sync_with_stdio(false);
- cin.tie(nullptr);
- int tt = 1;
- cin >> tt;
- while (tt--)
- solve();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement