反正当时是没有想到怎么做,但发现用栈模拟后就有思路了。
题意就是找光标前的位置的最大前缀和,那最朴素的实现就是拿数组模拟,每一次insert和delete都重新更新一下maxprev和sum和整个序列的值;后来发现maxprev和sum不用每次都更新,而是只要保证光标pos位置前的值都对就可以了(因为询问只关心了前pos位的最大前缀和),但即便是这样还是得O(n)更新insert的delete(因为要维护a数组)。
这个时候就要有stack的思想了,s1栈从底下到上面为1到光标之间的数,然后s2从最上面到最底下是从光标后一位到序列的最后一个数。
所以就能做到O(1)更新了。
1.注意下用了关同步的优化就不能用scanf,printf;不然会出现说不清楚的错误
2.输入用char不用char数组的话小心换行符
#include #include #include #include #include #include #include