SHOI2015 腦洞治療儀

2022-05-09 10:45:16 字數 1477 閱讀 3079

嘟嘟嘟

這題其實就是乙個線段樹維護最大連續和的水題。

別的操作不說,操作1只要二分找區間前\(k\)個0即可。

需要注意的是,因為操作1兩區間可能有交,因此要先清空再二分查詢……

複雜度\(o(n log ^ 2 n)\)。

#include#include#include#include#include#include#include#include#include#includeusing namespace std;

#define enter puts("")

#define space putchar(' ')

#define mem(a, x) memset(a, x, sizeof(a))

#define in inline

typedef long long ll;

typedef double db;

const int inf = 0x3f3f3f3f;

const db eps = 1e-8;

const int maxn = 2e5 + 5;

inline ll read()

inline void write(ll x)

int n, m;

struct tree

}t[maxn << 2];

in void build(int l, int r, int now)

int mid = (l + r) >> 1;

build(l, mid, now << 1);

build(mid + 1, r, now << 1 | 1);

t[now] = t[now << 1] + t[now << 1 | 1];

}in void change(int now, int d)

in void pushdown(int now)

}in void update(int l, int r, int now, int d)

pushdown(now);

int mid = (t[now].l + t[now].r) >> 1;

if(r <= mid) update(l, r, now << 1, d);

else if(l > mid) update(l, r, now << 1 | 1, d);

else update(l, mid, now << 1, d), update(mid + 1, r, now << 1 | 1, d);

t[now] = t[now << 1] + t[now << 1 | 1];

}in int query_sum(int l, int r, int now)

in tree query_con(int l, int r, int now)

int main()

update(l2, l, 1, 1);

} }

return 0;

}

SHOI2015 腦洞治療儀

我太sb啦 合併的時候又漏了,又漏了,又漏了 我個sb 這是個板子題,並不知道為什麼shoi2015會考這麼板子的題,但是我又sb了,又sb了,又sb了,又沒有1a 顯然我是涼了 這道題有三個操作 區間清零 將乙個區間清零,之後補到另乙個區間去,但是有可能補不滿 詢問乙個區間內最大全零子串 顯然這都...

SHOI2015 腦洞治療儀

洛谷題目鏈結 珂朵莉樹吼啊!對於操作 0 其實就是區間賦值為 0 的操作,直接套模板就行了 對於操作 1 應該是這個題目最難的操作了 雖然還是很簡單 我們先查詢 l 0,r 0 這個區間的 1 的數量,最後掃一遍 l 1,r 1 這個區間,如果 1 的數量夠的話直接更改區間值,如果不夠的話就把其中夠...

SHOI2015 腦洞治療儀 題解 (線段樹)

題目鏈結 題目大意 給定乙個只含 0 和 1 的序列。有三種操作 1.把 l,r 內所有數改為 0 2.把 l,r 內所有 1 拿走來填 l r 內所有 0 多了丟掉,少了優先從左開始填 3.查詢 l,r 內最長的 0 串。一眼能看出來考最大子段和。但是 好難調啊qaq 對於一段序列,我們要維護 4...