@@ -14,20 +14,16 @@ void check_condition_unordered(const basis& b) {
1414 or_bits |= b.b [i];
1515 }
1616}
17- void check_condition_ordered (
18- const basis_ordered<ll>& basis3,
19- const basis_ordered<bitset<lg>>& basis4) {
20- ll or_bits3 = 0 ;
21- bitset<lg> or_bits4 = 0 ;
22- for (int i = 0 ; i < lg; i++) {
23- assert (basis3.b [i] == 0 ||
24- bit_floor (1ULL * basis3.b [i]) == (1ULL << i));
25- assert (
26- (bit_floor (uint64_t (basis3.b [i])) & or_bits3) == 0 );
27- assert ((bit_floor (uint64_t (basis4.b [i].to_ullong ())) &
28- or_bits4.to_ullong ()) == 0 );
29- or_bits3 |= basis3.b [i];
30- or_bits4 |= basis4.b [i];
17+ const int B = 30 ;
18+ void check_condition_ordered (const xor_basis<B>& basis2) {
19+ bitset<B> or_bits2;
20+ for (int i = 0 ; i < B; i++) {
21+ assert (basis2.basis [i].none () ||
22+ bit_floor (basis2.basis [i].to_ulong ()) ==
23+ (1ULL << i));
24+ assert ((bit_floor (basis2.basis [i].to_ulong ()) &
25+ or_bits2.to_ulong ()) == 0 );
26+ or_bits2 |= basis2.basis [i];
3127 }
3228}
3329int main () {
@@ -38,43 +34,36 @@ int main() {
3834 int n;
3935 cin >> n;
4036 basis basis1;
41- basis_ordered<int > basis2; // to check that it compiles
42- assert (
43- sz (basis2.b ) == lg); // remove unused var warning
44- basis_ordered<ll> basis3;
45- basis_ordered<bitset<lg>> basis4;
37+ xor_basis<B> basis2;
38+ for (int i = 0 ; i < B; i++)
39+ assert (basis2.basis [i].none ());
4640 for (int i = 0 ; i < n; i++) {
4741 int val;
4842 cin >> val;
43+ bitset<B> v = val;
4944 assert (basis1.insert (val));
5045 assert (!basis1.insert (val));
51- assert (basis3.insert (val));
52- assert (!basis3.insert (val));
53- assert (basis4.insert (val));
54- assert (!basis4.insert (val));
46+ assert (basis2.insert (v));
47+ assert (!basis2.insert (v));
5548 }
5649 check_condition_unordered (basis1);
57- check_condition_ordered (basis3, basis4 );
50+ check_condition_ordered (basis2 );
5851 int m;
5952 cin >> m;
60- basis basis5;
61- basis_ordered<int > basis6;
62- assert (sz (basis6.b ) == lg);
63- basis_ordered<ll> basis7;
64- basis_ordered<bitset<lg>> basis8;
53+ basis basis3;
54+ xor_basis<B> basis4;
6555 for (int j = 0 ; j < m; j++) {
6656 int val;
6757 cin >> val;
68- assert (basis5.insert (val));
69- assert (!basis5.insert (val));
70- assert (basis7.insert (val));
71- assert (!basis7.insert (val));
72- assert (basis8.insert (val));
73- assert (!basis8.insert (val));
58+ bitset<B> v = val;
59+ assert (basis3.insert (val));
60+ assert (!basis3.insert (val));
61+ assert (basis4.insert (v));
62+ assert (!basis4.insert (v));
7463 }
75- check_condition_unordered (basis5 );
76- check_condition_ordered (basis7, basis8 );
77- basis inter = intersection (basis1, basis5 );
64+ check_condition_unordered (basis3 );
65+ check_condition_ordered (basis4 );
66+ basis inter = intersection (basis1, basis3 );
7867 check_condition_unordered (inter);
7968 cout << sz (inter.b ) << " " ;
8069 for (int val : inter.b ) cout << val << " " ;
0 commit comments