Submission #1246523

#TimeUsernameProblemLanguageResultExecution timeMemory
1246523countlessTeams (IOI15_teams)C++20
34 / 100
4091 ms35512 KiB
#include "teams.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef long double ld; #define sp <<" "<< #define endl "\n" int n; vector<int> a, b, o, p; // you're a bop void init(int N, int A[], int B[]) { n = N; a.resize(n), b.resize(n), o.resize(n), p.resize(n); for (int i = 0; i < n; i++) { a[i] = A[i], b[i] = B[i]; } iota(o.begin(), o.end(), 0); sort(o.begin(), o.end(), [&](int i, int j) { return a[i] < a[j]; }); iota(p.begin(), p.end(), 0); sort(p.begin(), p.end(), [&](int i, int j) { return b[i] < b[j]; }); } int can(int M, int K[]) { int m = M; vector<int> k(m); ll sum = 0; for (int i = 0; i < m; i++) { k[i] = K[i]; sum += k[i]; } if (sum > n) return 0; sort(k.begin(), k.end()); multiset<int> pq; int addl = 0, addr = 0; int reml = 0, remr = 0; for (int i = 0; i < M; i++) { // cerr << "let's process" sp k[i] << endl; while (addr < n and a[o[addr]] <= k[i]) addr++; for (int j = addl; j < addr; j++) { // cerr << "adding:" sp a[o[j]] sp b[o[j]] << endl; pq.insert(b[o[j]]); } addl = addr; while (remr < n and b[p[remr]] < k[i]) remr++; for (int j = reml; j < remr; j++) { // cerr << "removing:" sp a[p[j]] sp b[p[j]] << endl; auto it = pq.find(b[p[j]]); if (it != pq.end()) pq.erase(it); } reml = remr; // cerr << "in set" sp pq.size() << endl; for (int j = 0; j < k[i]; j++) { if (pq.empty()) return 0; pq.erase(pq.begin()); } } return 1; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...