嘟嘟嘟
這題其實就是乙個線段樹維護最大連續和的水題。
別的操作不說,操作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...