Submission #366506

#TimeUsernameProblemLanguageResultExecution timeMemory
366506kartelTenis (COCI20_tenis)C++14
50 / 110
109 ms3692 KiB
#include <bits/stdc++.h> #define in(x) freopen(x, "r", stdin) #define out(x) freopen(x, "w", stdout) #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> //#pragma GCC optimize("Ofast") //#pragma GCC optimize("unroll-loops") //#pragma GCC optimize("-O3") #define F first #define S second #define pb push_back #define M ll(1e9 + 7) #define sz(x) (int)x.size() #define re return #define oo ll(1e18) #define el '\n' #define pii pair <int, int> #define all(x) (x).begin(), (x).end() #define arr_all(x, n) (x + 1), (x + 1 + n) #define vi vector<int> #define eps (ld)1e-6 using namespace std; using namespace __gnu_pbds; typedef tree <pii, null_type, less_equal <pii> , rb_tree_tag, tree_order_statistics_node_update> ordered_set; typedef long long ll; typedef long double ld; typedef unsigned long long ull; typedef short int si; ordered_set os; const int N = 1e5 + 500; ll ans[N]; ll cnt[4], ps[N][3], n; int a[3][N]; int main() { // srand(time(0)); ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); // in("turtle.in"); // out("turtle.out"); // inf("input.txt"); // out("output.txt"); cin >> n; for (int i = 0; i < 3; i++) { for (int j = 1; j <= n; j++) { cin >> a[i][j]; ps[a[i][j]][i] = j; } } if (n > 3000) { map <int, int> mp; for (int i = 1; i < n; i++) { bool bad = 0; if (mp[a[0][i]]) bad = 1; if (!bad) { cnt[0] += n - mp.size(); for (int j = 1; j < 2; j++) { if (a[j][i] != a[0][i] && !mp[a[j][i]]) { if (ps[a[0][i]][j] < ps[a[j][i]][0]) cnt[0]--; } } } for (int j = 0; j < 3; j++) mp[a[j][i]] = 1; } mp.clear(); for (int i = 1; i < n; i++) { bool bad = 0; if (mp[a[1][i]]) { bad = 1; } if (!bad) { cnt[1] += n - mp.size(); for (int j = 0; j < 3; j++) { if (j == 1) continue; if (a[j][i] != a[1][i] && !mp[a[j][i]]) { if (ps[a[1][i]][j] < ps[a[j][i]][1]) cnt[1]--; } } } for (int j = 0; j < 3; j++) mp[a[j][i]] = 1; } for (int i = 0; i < 2; i++) cout << cnt[i] << " "; cout << n * 1ll * (n - 1) / 2ll - cnt[0] - cnt[1] << el; for (int i = 0; i < n; i++) cout << "0 "; return 0; } for (int i = 1; i <= n; i++) for (int j = i + 1; j <= n; j++) { ll mn = 1e9; for (int k = 0; k < 3; k++) mn = min(mn, min(ps[i][k], ps[j][k])); int cnt1 = 0, last; for (int k = 0; k < 3; k++) { if (ps[i][k] == mn || ps[j][k] == mn) cnt1++, last = k; } if (cnt1 == 1) { cnt[last]++; ans[i] += (ps[i][last] < ps[j][last]); ans[j] += (ps[j][last] < ps[i][last]); continue; } ll mn1 = 1e9; for (int k = 0; k < 3; k++) { if (ps[i][k] == mn && ps[i][k] < ps[j][k]) mn1 = min(mn1, ps[j][k]); else if (ps[j][k] == mn && ps[j][k] < ps[i][k]) mn1 = min(mn1, ps[i][k]); } for (int k = 0; k < 3; k++) { if (ps[i][k] == mn && ps[i][k] < ps[j][k]) { if (ps[j][k] == mn1) { cnt[k]++; ans[i]++; break; } } else if (ps[j][k] == mn && ps[j][k] < ps[i][k]) { if (ps[i][k] == mn1) { cnt[k]++; ans[j]++; break; } } } } for (int i = 0; i < 3; i++) cout << cnt[i] << " "; cout << el; for (int i = 1; i <= n; i++) { cout << ans[i] << " "; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...