| Task: | Ryhmät |
| Sender: | ArktinenKarpalo |
| Submission time: | 2025-09-27 01:42:20 +0300 |
| Language: | C++ (C++17) |
| Status: | READY |
| Result: | 85 |
| group | verdict | score |
|---|---|---|
| #1 | ACCEPTED | 10 |
| #2 | TIME LIMIT EXCEEDED | 0 |
| #3 | ACCEPTED | 75 |
| test | verdict | time | group | |
|---|---|---|---|---|
| #1 | ACCEPTED | 0.01 s | 1, 2, 3 | details |
| #2 | ACCEPTED | 0.01 s | 1, 2, 3 | details |
| #3 | ACCEPTED | 0.04 s | 1, 2, 3 | details |
| #4 | ACCEPTED | 0.00 s | 1, 2, 3 | details |
| #5 | ACCEPTED | 0.01 s | 1, 2, 3 | details |
| #6 | ACCEPTED | 0.51 s | 2 | details |
| #7 | ACCEPTED | 0.76 s | 2 | details |
| #8 | TIME LIMIT EXCEEDED | -- | 2 | details |
| #9 | ACCEPTED | 0.02 s | 2, 3 | details |
| #10 | ACCEPTED | 0.48 s | 3 | details |
| #11 | ACCEPTED | 0.35 s | 3 | details |
| #12 | ACCEPTED | 0.23 s | 3 | details |
| #13 | ACCEPTED | 0.90 s | 3 | details |
| #14 | ACCEPTED | 0.55 s | 3 | details |
| #15 | ACCEPTED | 0.64 s | 3 | details |
| #16 | ACCEPTED | 0.71 s | 3 | details |
Compiler report
input/code.cpp: In function 'int cnt_fst(std::bitset<100000>&, int)':
input/code.cpp:13:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::size_t' {aka 'long unsigned int'} [-Wsign-compare]
13 | for (int i = 0; i < bs.size(); i) {
| ~~^~~~~~~~~~~
input/code.cpp:13:34: warning: for increment expression has no effect [-Wunused-value]
13 | for (int i = 0; i < bs.size(); i) {
| ^
input/code.cpp:14:15: warning: comparison of integer expressions of different signedness: 'int' and 'std::size_t' {aka 'long unsigned int'} [-Wsign-compare]
14 | if (i + Y < bs.size()) {
| ~~~~~~^~~~~~~~~~~Code
#include <bits/stdc++.h>
#pragma GCC target("popcnt")
#define N 100000
using namespace std;
#define Y 512
int cnt_Y(const std::bitset<Y> &lol) { return lol.count(); }
int cnt_fst(bitset<100000> &bs, int n) {
int cnt = 0;
for (int i = 0; i < bs.size(); i) {
if (i + Y < bs.size()) {
int cnt2 = cnt_Y(*(((bitset<Y> *)(((char *)(&bs)) + (i / 8)))));
if (cnt2 + cnt < n) {
i += Y;
cnt += cnt2;
continue;
// return i;
}
}
if (bs[i])
cnt++;
if (cnt == n)
return i;
i++;
}
return -1;
}
void bsprint(bitset<100000> &bs) {
for (int i = 10; i >= 0; i--) {
cout << bs[i];
}
cout << endl;
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
int n, t;
cin >> n >> t;
vector<int> a(n), b(n);
vector<pair<int, int>> childrenA;
vector<pair<int, int>> childrenB;
array<bitset<100000>, 100001> A, B;
vector<pair<int, int>> QAQ;
for (int i = 0; i < n; i++) {
cin >> a[i] >> b[i];
QAQ.push_back({b[i], a[i]});
}
sort(QAQ.begin(), QAQ.end());
for (int i = 0; i < n; i++) {
childrenA.push_back({QAQ[i].second, i});
childrenB.push_back({QAQ[i].first, i});
}
sort(childrenA.begin(), childrenA.end());
sort(childrenB.begin(), childrenB.end());
vector<pair<int, pair<bitset<100000>, vector<pair<int, pair<int, bool>>>>>>
ABH;
bitset<100000> bs;
ABH.push_back({0, {bs, {}}});
auto it = childrenA.begin();
auto it2 = childrenB.begin();
vector<pair<int, pair<int, bool>>> mem;
for (int i = 1; i <= n; i++) {
while (it != childrenA.end() && it->first == i) {
bs.set(it->second);
mem.push_back({i, {it->second, true}});
it++;
}
while (it2 != childrenB.end() && it2->first == i - 1) {
bs.reset(it2->second);
mem.push_back({i, {it2->second, false}});
it2++;
}
if (mem.size() > 150) { // whatever factor
(ABH[ABH.size() - 1]).second.second = mem;
ABH.push_back({i, {bs, {}}});
mem.clear();
}
if (i == n && mem.size() > 0) {
ABH[ABH.size() - 1].second.second = mem;
ABH.push_back({i, {bs, {}}});
mem.clear();
}
}
while (t--) {
int m;
cin >> m;
bitset<100000> C;
C.set();
C >>= (100000 - n);
vector<int> k(m);
for (int i = 0; i < m; i++)
cin >> k[i];
sort(k.begin(), k.end());
bool ok = true;
for (int i = 0; i < m; i++) {
int cr = k[i];
auto rslt =
upper_bound(ABH.begin(), ABH.end(), cr,
[](const auto &a, const auto &b) { return a < b.first; });
rslt--;
bitset<100000> AB = ((*(rslt))).second.first;
for (auto &u : (*(rslt)).second.second) {
if (u.first > cr)
break;
AB[u.second.first] = u.second.second;
}
auto candidates = AB & C;
int until = cnt_fst(candidates, cr);
if (until == -1) {
ok = false;
break;
}
candidates <<= (100000 - until - 1);
candidates >>= (100000 - until - 1);
C ^= candidates;
}
if (ok) {
cout << "YES\n";
} else {
cout << "NO\n";
}
}
}
Test details
Test 1
Group: 1, 2, 3
Verdict: ACCEPTED
| input |
|---|
| 100 100 10 10 10 10 6 9 6 8 ... |
| correct output |
|---|
| YES YES YES NO YES ... |
| user output |
|---|
| YES YES YES NO YES ... Truncated |
Test 2
Group: 1, 2, 3
Verdict: ACCEPTED
| input |
|---|
| 100 100 9 9 6 10 8 10 8 8 ... |
| correct output |
|---|
| NO YES NO YES NO ... |
| user output |
|---|
| NO YES NO YES NO ... Truncated |
Test 3
Group: 1, 2, 3
Verdict: ACCEPTED
| input |
|---|
| 100 100 1 1 1 1 1 1 1 1 ... |
| correct output |
|---|
| YES YES YES YES YES ... |
| user output |
|---|
| YES YES YES YES YES ... Truncated |
Test 4
Group: 1, 2, 3
Verdict: ACCEPTED
| input |
|---|
| 100 100 100 100 100 100 100 100 100 100 ... |
| correct output |
|---|
| YES YES YES YES YES ... |
| user output |
|---|
| YES YES YES YES YES ... Truncated |
Test 5
Group: 1, 2, 3
Verdict: ACCEPTED
| input |
|---|
| 100 100 4 9 3 8 7 9 7 9 ... |
| correct output |
|---|
| NO NO NO NO NO ... |
| user output |
|---|
| NO NO NO NO NO ... Truncated |
Test 6
Group: 2
Verdict: ACCEPTED
| input |
|---|
| 1000 1000 9 10 2 5 10 10 5 5 ... |
| correct output |
|---|
| YES YES YES YES NO ... |
| user output |
|---|
| YES YES YES YES NO ... Truncated |
Test 7
Group: 2
Verdict: ACCEPTED
| input |
|---|
| 1000 1000 5 7 9 9 3 7 8 10 ... |
| correct output |
|---|
| YES NO NO YES YES ... |
| user output |
|---|
| YES NO NO YES YES ... Truncated |
Test 8
Group: 2
Verdict: TIME LIMIT EXCEEDED
| input |
|---|
| 1000 1000 1 1 1 1 1 1 1 1 ... |
| correct output |
|---|
| YES YES YES YES YES ... |
| user output |
|---|
| (empty) |
Test 9
Group: 2, 3
Verdict: ACCEPTED
| input |
|---|
| 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 ... |
| correct output |
|---|
| YES YES YES YES YES ... |
| user output |
|---|
| YES YES YES YES YES ... Truncated |
Test 10
Group: 3
Verdict: ACCEPTED
| input |
|---|
| 100000 1000 774 778 363 852 309 668 261 459 ... |
| correct output |
|---|
| YES YES YES YES YES ... |
| user output |
|---|
| YES YES YES YES YES ... Truncated |
Test 11
Group: 3
Verdict: ACCEPTED
| input |
|---|
| 100000 1000 1233 1914 901 3963 1277 4293 1083 1599 ... |
| correct output |
|---|
| NO NO YES NO NO ... |
| user output |
|---|
| NO NO YES NO NO ... Truncated |
Test 12
Group: 3
Verdict: ACCEPTED
| input |
|---|
| 100000 1000 1970 8631 4606 5797 6317 8162 8204 8789 ... |
| correct output |
|---|
| NO NO NO NO NO ... |
| user output |
|---|
| NO NO NO NO NO ... Truncated |
Test 13
Group: 3
Verdict: ACCEPTED
| input |
|---|
| 100000 1000 1000 1000 1000 1000 1000 1000 1000 1000 ... |
| correct output |
|---|
| YES YES YES YES YES ... |
| user output |
|---|
| YES YES YES YES YES ... Truncated |
Test 14
Group: 3
Verdict: ACCEPTED
| input |
|---|
| 100000 100000 1 100000 1 100000 1 100000 1 100000 ... |
| correct output |
|---|
| YES YES YES YES YES ... |
| user output |
|---|
| YES YES YES YES YES ... Truncated |
Test 15
Group: 3
Verdict: ACCEPTED
| input |
|---|
| 100000 100000 80971 98445 93046 96043 74840 94035 95931 96609 ... |
| correct output |
|---|
| NO NO NO NO NO ... |
| user output |
|---|
| NO NO NO NO NO ... Truncated |
Test 16
Group: 3
Verdict: ACCEPTED
| input |
|---|
| 100000 10000 6481 14350 69129 87600 6217 16462 4387 16625 ... |
| correct output |
|---|
| YES YES YES YES YES ... |
| user output |
|---|
| YES YES YES YES YES ... Truncated |
