Krydom: 暁の水平线に胜利を刻むのです

ソロモンの悪夢、見せてあげる!

@krydom1年前

07/17
12:13
线段树

[bzoj 3526] [Poi2014]Card

♦♦♦♦♦♦   Description   ♦♦♦♦♦♦

 有n张卡片在桌上一字排开,每张卡片上有两个数,第i张卡片上,正面的数为a[i],反面的数为b[i]。现在,有m个熊孩子来破坏你的卡片了!
第i个熊孩子会交换c[i]和d[i]两个位置上的卡片。
每个熊孩子捣乱后,你都需要判断,通过任意翻转卡片(把正面变为反面或把反面变成正面,但不能改变卡片的位置),能否让卡片正面上的数从左到右单调不降。

♦♦♦♦♦♦   Input   ♦♦♦♦♦♦

第一行一个n。
接下来n行,每行两个数a[i],b[i]。
接下来一行一个m。
接下来m行,每行两个数c[i],d[i]。

♦♦♦♦♦♦   Output   ♦♦♦♦♦♦

m行,每行对应一个答案。如果能成功,输出TAK,否则输出NIE。

♦♦♦♦♦♦   Sample Input   ♦♦♦♦♦♦

4
2 5
3 4
6 3
2 7
2
3 4
1 3

♦♦♦♦♦♦   Sample Output   ♦♦♦♦♦♦

NIE
TAK

♦♦♦♦♦♦   Hint   ♦♦♦♦♦♦

【样例解释】
交换3和4后,卡片序列为(2,5) (3,4) (2,7) (6,3),不能成功。
交换1和3后,卡片序列为(2,7) (3,4) (2,5) (6,3),翻转第3张卡片,卡片的正面为2,3,5,6,可以成功。

【数据范围】
n≤200000,m≤1000000,0≤a[i],b[i]≤10000000,1≤c[i],d[i]≤n.

♦♦♦♦♦♦   题解  ♦♦♦♦♦♦

用线段树来维护,每一个区间维护一个bool数组a[0..1][0..1]表示这个区间的左端点取某个值并且右端点取某个值能不能成为一个不降序列,转移就可以了

 

[bzoj 3526] [Poi2014]Card