8
8
9
9
#include < iostream>
10
10
#include < vector>
11
+ #include < set>
11
12
using namespace std ;
12
13
13
14
bool isEvenBits (int num) {
@@ -25,57 +26,48 @@ bool isEvenBits(int num) {
25
26
return (cnt % 2 == 0 );
26
27
}
27
28
28
- int countEvenBits (vector<int > nums) {
29
- int cnt = 0 ;
30
- int n = nums.size ();
31
- for (int i = 0 ; i < n; ++i) {
32
- if (isEvenBits (nums[i])) {
33
- cnt = i + 1 ;
34
- } else {
35
- for (int k = 0 ; k < i - cnt; ++k) {
36
- if (isEvenBits (nums[k] ^ nums[i])) {
37
- cnt = i - k - 1 ;
38
- break ;
39
- }
40
- }
41
- }
42
- }
43
- return cnt;
44
- }
45
-
46
- int main () {
29
+ int main ()
30
+ {
47
31
int T; cin >> T;
48
32
for (int i = 1 ; i <= T; ++i) {
49
33
int N, Q; cin >> N >> Q;
50
- vector<int > nums ( N );
51
34
52
- for (int k = 0 ; k < N; ++k) cin >> nums[k];
53
-
54
- vector<int > xors ( N, 0 );
55
- int mask = 0 ;
35
+ vector<int > nums ( N );
36
+ set<int > siOddBits; int tmp;
56
37
for (int k = 0 ; k < N; ++k) {
57
- mask ^= nums[k];
58
- xors[k] = mask;
38
+ cin >> tmp; nums[k] = tmp;
39
+ if (!isEvenBits (tmp)) {
40
+ siOddBits.insert (k);
41
+ }
59
42
}
60
43
44
+ int idx, val;
45
+ bool bPrev, bNow;
61
46
vector<int > ans ( Q );
47
+
62
48
for (int k = 0 ; k < Q; ++k) {
63
- int idx, val;
64
49
cin >> idx >> val;
50
+ bPrev = isEvenBits (nums[idx]);
51
+ bNow = isEvenBits (val);
65
52
66
- int m = (nums[idx] ^ val);
67
- nums[idx] = val ;
68
- for ( int j = idx; j < N; ++j ) {
69
- xors[j] ^= m ;
53
+ if (bPrev && !bNow) {
54
+ siOddBits. insert (idx) ;
55
+ } else if (!bPrev && bNow ) {
56
+ siOddBits. erase (idx) ;
70
57
}
71
58
72
- ans[k] = countEvenBits (xors);
59
+ int sz = siOddBits.size ();
60
+ if (sz % 2 == 0 ) {
61
+ ans[k] = N;
62
+ } else {
63
+ ans[k] = max ( *siOddBits.rbegin (), N - *siOddBits.begin () - 1 );
64
+ }
65
+ nums[idx] = val;
73
66
}
74
67
75
- cout << " Case #" << i << " : " ;
68
+ cout << " Case #" << i << " :" ;
76
69
for (int k = 0 ; k < Q; ++k) {
77
- if (k != 0 ) cout << " " ;
78
- cout << ans[k];
70
+ cout << " " << ans[k];
79
71
}
80
72
cout << " \n " ;
81
73
}
0 commit comments