正解:構造
解題報告:
這種題目一般都是首先考慮合法性
這題也不例外,思考怎么樣是合法的呢?
有四點:
1)a[1]=a[2n-1],顯然不說
2)若a[i]=a[j],則(j-i)&1==0,即ij同奇偶性,dfs序的性質
3)若a[x]=a[y],a[m]=a[n],則(x-m)*(y-n)>0,這個可以用st表做(后面會詳細解釋下st表的,,,然后有時間會開個倍增專題港下st表什么的QwQ
4)a[i]≠a[i-1]
然后判完可行性就考慮構造鴨
考慮如果存在a[x]=a[y],就說明[x,y]這一段是棵子樹,於是用一點兒分治思想,先做[x,y],這樣就解決了一個子問題,就可以刪去[x+1,y],看到這種刪除操作就應該能想到並查集維護一波,over
然后這么操作完之后就不會剩下相等的非0數了
然后接着考慮,如果有xy0或0yx的排列,就直接把0=x,然后把xy丟了(就還會剩一個x
如果有xyz這樣的序列,就說明不可能了搞不出來辣
然后如果上面這個操作也搞完之后,如果數據是可構造的,就會變成,這樣子:X0...0A10...0A20...X
然后就遞歸着做就好辣
設當前樹根為rt,搞個雙端隊列,把當前的數據放進去,每次看隊頭隊尾兩元素(h&t
如果h=t=0,找到一個麻油出現過的值x,令h=t=rt=x,彈去h&t
如果h*t=0,h2+t2!=0,不妨設h=0,t!=0,令rt=h=t,彈去h&t,
如果h!=0,t!=0,不妨選h,令h旁邊的點(必為0)=rt,彈去h&rt
就這樣,,,具體看代碼趴QAQ
代碼咕了,,,中午也許會放趴QAQ