poj2750 Potted Flower[线段树]
求一个环待修改最大连续子段和且不能全部选上。 先断环,在$1 \sim n$的链上,考虑没有限制全选的最大连续子段和。显然最大解只有两种情况,一种是这个,一种是另一个。 第一个可以直接套路维护,第二个无非就是整体的和减去最小连续子段和。两者取一个最大的就行了。 然后考虑到如果全选的情况。这种情况下只能被迫采取第二种选法。也就是特判若第一种选法等于当前区间和,则强制用第二种(可以证明肯定是对的,且这个其实有漏洞,但是答案不会错)。于是无脑码一波segment_tree即可。 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cmath> 5 #include<algorithm> 6 #define dbg(x) cerr<<#x<<" = "<<x<<endl 7 using namespace std; 8 typedef pair<int,int> pii; 9 typedef long long ll; 10 template<typename T>inline char MIN(T&A,T B){return A>B?A=B,1:0;} 11 template<typename T>inline char MAX(T&A,T B){return A<B?A=B,1:0;} 12