bzoj4592
(吐槽一下ds
y ,我=這個資料=了一天我xx
x!! )
一開始看到這個題。誒,區間連續最大和誒!把腦洞的值為1,正常的賦為−i
nf但是操作1怎麼辦。。
發現就是先統計出l0
到r0 區間內−i
nf的個數to
t ,然後區間賦為1.
然後統計l1
到r1 區間內1的個數to
t ,如果to
t>to
t 就直接區間賦值了嘛。
其他情況就在l1
到r1 內二分一下然後區間賦值。
複雜度o(n
log2
n)打得輕鬆加愉快!wo
ri怎麼t了!lz
明明最極限的資料都2s
卡過去了,ex
m!!?
然後就是dt
的=資料時間。。
測出來還是
t 了一組qa
q,媽蛋被卡常了qn
q 。哎兩個lo
g 線段樹還打得醜沒得法。。
發現這個題區間最大連續和比較特殊。。只可能兩個值。。改了一下寫法卡卡常數終於18s
混過去了。
#include
#include
#include
#include
#include
#include
#define n 200005
#define mod 1000000007
#define inf 200001
using
namespace
std;
typedef
long
long ll;
typedef
unsigned
long
long ull;
const ull base=31;
ll read()
while(isdigit(ch))
return x*f;
}int n,m;
class seg_treee[n<<2];
void build(int p,int l,int r)
void pushup(seg_tree &p,seg_tree l,seg_tree r)
void pushdown(int k)
void update(int p,int x,int y,int z)
if(e[p].tag) pushdown(p);
if(y<=mid) update(p<<1,x,y,z);
else
if(x>mid) update(p<<1|1,x,y,z);
else update(p<<1,x,mid,z),update(p<<1|1,mid+1,y,z);
pushup(e[p],e[p<<1],e[p<<1|1]);
}void solve1()
int find1(int p,int x,int y)
int find_pos(int l,int r,int x)
return rtn;
}void solve2()
seg_tree query(int p,int x,int y)
void solve3()
int main()
return0;}
BZOJ4592 Shoi2015 腦洞治療儀
進行 實際上相當於用1覆蓋一段區間,這段區間內原有的1的個數加上挖出來的1的個數等於這段區間的長度,並且這段區間的長度最長為 的區間長度 知道了一段區間的長度,區間裡有多少1,還剩多少腦組織,就能知道這段區間是否被完全覆蓋 需要判斷是否還剩腦組織,如果沒了就返回,要不然複雜度不對 複雜度 o m l...
BZOJ 4592 Shoi2015 腦洞治療儀
4592 shoi 2015 腦 洞治療儀 4592 shoi2015 腦洞 儀 4592 shoi 2015 腦洞治 療儀description 曾經發明了自動刷題機的發明家shtsc又公開了他的新發明 腦洞 儀 一種可以 他因為發明而日益增大的腦洞的神秘裝置。為了簡單起見,我們將大腦視作乙個01...
BZOJ4592 Shoi2015 腦洞治療儀
bzoj4592 shoi2015 腦洞 儀 曾經發明了自動刷題機的發明家shtsc又公開了他的新發明 腦洞 儀 一種可以 他因為發明而日益增大的腦洞的神秘裝置。為了簡單起見,我們將大腦視作乙個01序列。1代表這個位置的腦組織正常工作,0代表這是一塊腦洞。腦洞 儀修補某一塊腦洞的基本工作原理就是將另...