Bzoj2329 HNOI2011 括號修復

2021-08-18 16:14:25 字數 1449 閱讀 9077

傳送門

答案就是去掉匹配的括號後的左邊右括號個數/2

/

2取下整和右邊左括號個數/2

/

2取下整

維護: 設(

(

為−1' role="presentation" style="position: relative;">−1−

1,) )

為1' role="presentation" style="position: relative;">1

1,最大的字首和就是左邊右括號的個數

最小的的字尾和的相反數就是右邊左括號的個數

因為要支援取反,翻轉等操作

我們要維護左邊最大最小,右邊最大最小,子樹和,子樹大小

然後套spl

ays pl

ay

模板

# include 

# define il inline

# define rg register

# define fill(a, b) memset(a, b, sizeof(a))

using

namespace

std;

typedef

long

long ll;

template

il void input(rg int &x)

const

int maxn(1e5 + 5);

typedef

int arr[maxn];

int n, m, rt;

arr lmn, rmn, lmx, rmx, size, val, sum, fa, inv, rev, cov, ch[2];

char s[maxn];

# define ls ch[0][x]

# define rs ch[1][x]

il int son(rg int x)

il void update(rg int x)

il void rotate(rg int x)

il void splay(rg int x, rg int ff)

il void build(rg int l, rg int r, rg int ff)

il void invert(rg int x)

il void cover(rg int x, rg int op)

il void reverse(rg int x)

il void pushdown(rg int x)

il int kth(rg int x, rg int k)

}il int split(rg int l, rg int r)

char op[10], v;

int main(rg int argc, rg char* argv)

return

0;}

BZOJ2329 HNOI2011括號修復

bzoj 考慮詢問,如果我們把相互匹配的括號刪除,那麼我們最終會得到形如 的序列。對於這樣乙個序列,我們不妨貪心。將左邊連續的l個右括號,從第乙個到 l 1 2分別改為左括號。對右邊則反之。那麼當l為偶數時,左邊會變得合法。當l為奇數時,會多餘乙個左括號,但由於題目保證了有解,即l r為偶數,這個多...

BZOJ2329 HNOI2011 括號修復

bzoj luogu 你需要維護乙個括號序列,支援如下四種操作 1 把區間 l,r 全部改成 或是 2 把區間 l,r 翻轉。3 把區間 l.r 反轉,即 變 變 4 查詢區間 l,r 至少要修改幾個括號才能全部匹配。乙個區間的括號去掉匹配後一定長成 這個樣子。所以答案就是未匹配左括號個數 2 未匹...

bzoj2329 HNOI2011 括號修復

time limit 40 sec memory limit 128 mb submit 1232 solved 581 submit status discuss 分析 第一次做覺得這道題好神啊!思維量和 量都驚人!今天早上又花20min碼了一次,覺得這只不過是乙個套路題罷了.這道題實際上是由兩個...