題解:題目就是讓求區間的正偶次個數,這裡可以仿照區間眾數的做法,整體下來進行分塊就比較複雜,還需要考慮銜接塊和大整塊,但是還是比較好思考的。
(重點看注釋)
// luogu-judger-enable-o2
//有是不挺的tle,,又是要卡常,,,開o2過的
#include
using namespace std;
inline
intread()
while
(ch<=
'9'&&ch>=
'0')s=s*
10+ch-
'0',ch=
getchar()
;return s*w;
}const
int sea=
1e5+7;
int n,m,mx,ans,top,num,block,belong[sea]
,cnt[
400]
[sea]
,f[400][
400]
,l[sea]
,a[sea]
,c[sea]
,st[sea]
;int
main()
belong[n+1]
=belong[n]+1
; l[belong[n+1]
]=n+1;
//建塊,跟之前的建塊有點不同,這裡主要是要每個塊的左端點
for(
int i=
1;i<=belong[n]
;i++)}
//記錄每個塊從l開始到n時的眾數出現的正偶次存在cnt中 ,f是記錄每一塊的初始答案
while
(m--
)//棧處理小區間的答案
printf
("%d\n"
,ans)
;continue;}
if(belong[y]
-belong[x]
>=
2) ans=f[belong[x]+1
][belong[y]-1
];//中間有整塊
for(
int i=x;i];i++
) c[a[i]]++
,st[
++top]
=a[i]
;for
(int i=l[belong[y]
];i<=y;i++
) c[a[i]]++
,st[
++top]
=a[i]
;//銜接塊
while
(top)
top--;}
printf
("%d\n"
,ans);}
return0;
}
BZOJ 2821 作詩 (分塊)
問題描述 神犇sjy虐完heoi之後給傻 lyd出了一題 shy是t國的公主,平時的一大愛好是作詩。由於時間緊迫,shy作完詩之後還要虐oi,於是shy找來一篇長度為n的文章,閱讀m次,每次只閱讀其中連續的一段 l,r 從這一段中選出一些漢字構成詩。因為shy喜歡對偶,所以shy規定最後選出的每個漢...
bzoj2821 作詩 Poetize 分塊
description 神犇sjy虐完heoi之後給傻 lyd出了一題 shy是t國的公主,平時的一大愛好是作詩。由於時間緊迫,shy作完詩 之後還要虐oi,於是shy找來一篇長度為n的文章,閱讀m次,每次只閱讀其中連續的一段 l,r 從這一段中選出一 些漢字構成詩。因為shy喜歡對偶,所以shy規...
BZOJ2821 作詩 Poetize 分塊
神犇sjy虐完heoi之後給傻 lyd出了一題 shy是t國的公主,平時的一大愛好是作詩。由於時間緊迫,shy作完詩之後還要虐oi,於是shy找來一篇長度為n的文章,閱讀m次,每次只閱讀其中連續的一段 l,r 從這一段中選出一些漢字構成詩。因為shy喜歡對偶,所以shy規定最後選出的每個漢字都必須在...