제출 #1261662

#제출 시각아이디문제언어결과실행 시간메모리
1261662biankTeams (IOI15_teams)C++20
0 / 100
979 ms124564 KiB
#include "teams.h" #include <bits/stdc++.h> #define forsn(i, s, n) for (int i = int(s); i < int(n); i++) #define forn(i, n) forsn(i, 0, n) #define dforsn(i, s, n) for (int i = int(n) - 1; i >= int(s); i--) #define dforn(i, n) dforsn(i, 0, n) #define sz(x) int(x.size()) #define all(x) begin(x), end(x) #define pb push_back #define eb emplace_back #define fst first #define snd second using namespace std; using vi = vector<int>; const int SZ = 1 << 20; vi tree[2 * SZ]; int cnt(int u, int l, int r) { return int(lower_bound(all(tree[u]), r) - lower_bound(all(tree[u]), l)); } int query(int l1, int r1, int l2, int r2) { int ret = 0; for (l1 += SZ, r1 += SZ; l1 < r1; l1 /= 2, r1 /= 2) { if (l1 & 1) ret += cnt(l1++, l2, r2); if (r1 & 1) ret += cnt(--r1, l2, r2); } return ret; } int find(int k, int l, int r) { int u = 1; while (u < SZ) { u *= 2; int s = cnt(u, l, r); if (k > s) k -= s, u++; } return u - SZ; } int n; void init(int N, int A[], int B[]) { n = N; forn(i, n) tree[B[i] + SZ].pb(A[i]); forn(i, SZ) sort(all(tree[i + SZ])); dforsn(i, 1, SZ) merge(all(tree[2 * i]), all(tree[2 * i + 1]), back_inserter(tree[i])); } int can(int M, int K[]) { vi a, b, cnt; sort(K, K + M); a.pb(0), b.pb(n), cnt.pb(0); forn(i, M) { while (!b.empty() && b.back() < K[i]) { a.pop_back(), b.pop_back(), cnt.pop_back(); } int prevB = K[i], need = K[i]; while (!cnt.empty()) { int total = query(prevB, b.back() + 1, a.back() + 1, K[i] + 1) + cnt.back(); if (total < need) { need -= total, prevB = b.back() + 1; a.pop_back(), b.pop_back(), cnt.pop_back(); } else { break; } } if (cnt.empty()) return 0; int prev = query(0, prevB, a.back() + 1, K[i] + 1); int minB = find(prev + need, a.back() + 1, K[i] + 1); minB = min(minB, b.back()); int total = query(prevB, minB + 1, a.back() + 1, K[i] + 1); if (minB == b.back()) total += cnt.back(); //assert(total >= need); if (total < need) return 0; a.pb(K[i]), b.pb(minB), cnt.pb(total - need); } 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...