BZOJ 5168 && Luogu P3740 [HAOI2014]貼海報 線段樹~~
阿新 • • 發佈:2019-04-28
lse -- spa 操作 digi mes sin 離散 class
據說某谷數據十分水。。。但幸好BZOJ上也過了。。。話說我記得講課時講的是奇奇怪怪的離散化。。但現在突然覺得什麽都可以線段樹瞎搞了。。。QAQ
直接就是這個區間有沒有被覆蓋,被覆蓋直接return; 如果出現修改,那麽就說明它能被看見,++ans
短的一批的線段樹(去了不必要的操作碼量還是很小的。。。)
#include<cstdio> #include<iostream> #define R register int #define ls (tr<<1) #define rs (tr<<1|1) const int N=10000010,M=1010; using namespace std; inline int g() { R ret=0,fix=1; register char ch; while(!isdigit(ch=getchar())) fix=ch==‘-‘?-1:fix; do ret=ret*10+(ch^48); while(isdigit(ch=getchar())); return ret*fix; } int n,m,ans,l[M],r[M]; bool flg[N<<2],cv; inline void change(int tr,int l,int r,intLL,int RR) { if(flg[tr]) return ; if(LL<=l&&r<=RR) {flg[tr]=cv=true; return ;} R md=l+r>>1; if(LL<=md) change(ls,l,md,LL,RR); if(RR>md) change(rs,md+1,r,LL,RR); flg[tr]=flg[ls]&flg[rs]; } signed main() { n=g(),m=g(); for(R i=1;i<=m;++i) l[i]=g(),r[i]=g();for(R i=m;i;--i) cv=false,change(1,1,n,l[i],r[i]),ans+=cv; printf("%d\n",ans); }
2019.04.27
BZOJ 5168 && Luogu P3740 [HAOI2014]貼海報 線段樹~~