題意
有乙個長度為 n
nn 僅由0和1組成的序列。有 m
mm 個問題和回答:在區間 [li
,ri]
[l_i,r_i]
[li,r
i] 內有奇數個或者偶數個 1
11 。
輸出乙個整數 k
kk ,表示這個01序列滿足 1∼k
1\sim k
1∼k 個回答,但不滿足 1∼k
+1
1\sim k+1
1∼k+
1 個回答。如果滿足所有回答,則輸出問題的總數量。
解法維護 1
11 的數量的字首和的奇偶性 s[i
]s[i]
s[i] 。
**
#pragma region
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace std;
typedef
long
long ll;
#define rep(i, a, n) for (int i = a; i <= n; ++i)
#define per(i, a, n) for (int i = n; i >= a; --i)
namespace fastio
inline
charnc(
)}return
*p1++;}
inline
bool
blank
(char ch)
template
<
class
t>
inline
bool
r(t &x)
inline
boolr(
double
&x)if
(sign)
x =-x;return
true;}
inline
boolr(
char
*s)inline
boolr(
char
&c)return
true;}
template
<
classt,
class..
. u>
bool
r(t &h, u &..
. t)
#undef out_size
#undef buf_size};
// namespace fastio
using
namespace fastio;
template
<
class
t>
void_w(
const t &x)
void_w(
const
int&x)
void_w(
const
int64_t
&x)void_w(
const
double
&x)void_w(
const
char
&x)void_w(
const
char
*x)template
<
classt,
class
u>
void_w(
const pair
&x)template
<
class
t>
void_w(
const vector
&x)voidw(
)template
<
classt,
class..
. u>
voidw(
const t &head,
const u &..
. tail)
#pragma endregion
const
int maxn =
2e4+5;
int n, m;
int fa[maxn]
, d[maxn]
;int a[maxn]
, b[maxn]
;char op[maxn][10
];intfindroot
(int x)
void
link
(int x,
int y,
int f)
bool
check
(int x,
int y,
int f)
intmain()
memcpy
(b, a,
sizeof
(a))
;sort
(b +
1, b +1+
2* m)
;rep
(i,1,2
* m) a[i]
=lower_bound
(b +
1, b +1+
2* m, a[i]
)- b;
rep(i,
1, m)
w(m)
;}
AcWing 239 奇偶遊戲 並查集,拓展域
題意 有乙個長度為 n nn 僅由0和1組成的序列。有 m mm 個問題和回答 在區間 li ri l i,r i li r i 內有奇數個或者偶數個 1 11 輸出乙個整數 k kk 表示這個01序列滿足 1 k 1 sim k 1 k 個回答,但不滿足 1 k 1 1 sim k 1 1 k 1...
邊帶權並查集 acwing 238
有n列戰艦,有兩種操作,第一種,把一列戰艦放在另一列的後面,也就是合併操作,第二種是查詢操作,問兩個戰艦是不是在同一列,如果是的話,就輸出它們之間隔了多少個戰艦,如果不是就輸出 1.用乙個陣列表示是不是在乙個集合裡,然後用另乙個陣列d表示每一列的大小,還有乙個陣列siz表示邊的權值。d是到祖先的距離...
奇偶遊戲 帶權並查集
奇偶遊戲 首先需要知道異或這種東西 兩個數異或的結果是什麼 兩個數按位做差的絕對值 異或相當於 模2 做加法 只看最後一位 例如 5 101 3 011 只看最後以為為0 就是偶數,奇數加奇數為偶數,這一題用到此方法 1個數異或自己為0 乙個數異或0 還是自己 定義s i 為前i個數又多少個奇數1 ...