BZOJ4964 加長的咒語

2021-09-07 13:52:17 字數 781 閱讀 4759

把$($看作$-1$,$)$看作$1$,設$a$為字首和,則相當於找兩個位置$x,y$使得$a[x]=a[y]$,且$a[x]$是$[x,y]$的區間最大值。

求出詢問區間的最大值$o$,然後找到$o$在該區間內最左和最右的出現位置,將其作為答案。

那麼剩下的答案只可能在$[l,o)$或$(o,r]$,以$[l,o)$為例。

通過單調棧求出每個位置$i$往右最長延伸長度$g[i]$,使得中間$a[i]$是區間最大值,且$a[i]=a[i+g[i]]$。

那麼在$[l,o)$中,因為$o$的阻隔,必然滿足$i+g[i]時間複雜度$o(n\log n)$。

#include#includeusing namespace std;

typedef pairp;

const int n=400010,m=1050000,inf=~0u>>1;

int n,m,i,x,y,l,r,o,ans,a[n],q[n],t,f[n],g[n],v[m],vf[m],vg[m];p b[n];char s[n];

inline void read(int&a)

inline void up(int&a,int b)

int ask(int x,int a,int b,int c,int d,int*v)

int main()

for(q[t=0]=n+1,i=n;i;q[++t]=i--)

build(1,1,n);

while(m--)

return 0;

}

bzoj4964 加長的咒語

求區間最長匹配的括號序列子串。很有意思的括號,但是我有些細節沒處理好,導致 長,演算法複雜。如果有更好的演算法我也很想知道啊 考慮乙個括號序列a b1 b2 b3 其中與某個括號匹配的相對的括號唯一。證明顯然。有乙個顯然的演算法 用棧判斷乙個字串是否為括號序列。考慮拓展這個結論 對任意括號串的某個括...

洛谷 P4964 綾小路的特別考試 解題報告

這世界上 勝利 便是一切。無關乎過程。要付出多少犧牲都無所謂。只要最後我 勝出 那就行了。一場新的特別考試來臨了,這次的考試內容是 wan e de 文化課,但有所不同的是,考試中允許學生使用對講機。然而,對講機的接收範圍有限 每個對講機都能傳送無限遠,但是只能接收到接收範圍內的訊號 所以,需要周密...

BZOJ1052 BZOJ3760 覆蓋問題

原題位址 先說自己的逗比方法 二分答案,把所有點用乙個最小的矩形 框 起來,易證矩形的其中乙個端點是最優解中正方形的乙個端點,然後列舉四個端點後遞迴處理,差不多了 然後 olz黃學長的o n 做法 ac code include include include using namespace std...