題意
有乙個長度為 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 =
1e5+5;
int n, m;
int a[maxn]
, b[maxn]
;char op[maxn][10
];int fa[maxn]
;int
findroot
(int x)
void
link
(int x,
int y)
intmain()
memcpy
(b, a,
sizeof
(b))
;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)
else}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...
奇偶遊戲 帶權並查集
奇偶遊戲 首先需要知道異或這種東西 兩個數異或的結果是什麼 兩個數按位做差的絕對值 異或相當於 模2 做加法 只看最後一位 例如 5 101 3 011 只看最後以為為0 就是偶數,奇數加奇數為偶數,這一題用到此方法 1個數異或自己為0 乙個數異或0 還是自己 定義s i 為前i個數又多少個奇數1 ...
資料結構 並查集 奇偶遊戲(做法1)
並查集有兩個擴充套件應用,乙個是帶邊權的並查集另乙個是帶擴充套件域的並查集。這道題用兩種方法都可以做。值得學習。題目 奇偶遊戲 做法1 帶邊權的並查集 1 用 sum x sum x sum x 表示 1 11到 x xx 中1的個數 此處 sum x sum x sum x 不需要具體求出 讀入 ...