T3这个思路是不是假了啊。。。
首先选了第一个数后会发现,其对应的数必须最后取
这样这个数就把序列分成了两段,每一段类似于栈,只能从一边取
进一步考虑第二个数(显然只能是栈顶元素),发现其对应元素必须在栈底,否则会把其到栈底的元素“封死”,导致无解
也就是说接下来取的每个数必须满足其两次出现的位置一个在栈顶一个在栈底
如果栈顶和栈底元素都不同,直接无解
如果只有一组相同的,显然必须选
如果有两组相同的,贪心地优先选小的数,因为可以发现两组是互不影响的
这样只要确定了第一个数怎么选,后面的数可以线性地算出来
然后第一个数选左边还是右边分别算一遍即可
O(n)
但是不管怎么说我考场最后5min才过小样例,结果大样例只对了前几个,肯定是爆零了。。。