【正解】
一眼分治
哎(O(N^2))有50分,先敲了
等下,由于最大的数或进去了,所以有(g(T) geq f(T))
也就是说,我们用(n imes (n-1) /2)算出总数,再减去(g(T) = f(T))的就可以了
我们套路地分治,每次统计左端点在左半边,右端点在右半边的种数
设(f(i))表示当前点到中间分割点的最大值,(g(i))表示当前点到中间分割点的或和
然后两边分开统计
发现(f)往两边是单调的,(g)不仅是单调的,靠内的还一定是靠外的的子集
每次for一遍,另一边可以二分,这样是(O(Nlog_N^2))的……80就80吧
然后答案少了很多
发现两边很多重复的,就把右边的删了
过样例了
然后大样例死循了
debug一下,发现二分边界很多,各种特判,最后乱得不成样子
突然意识到“没根据的乱搞不可能是正解”,毅然决定把它删了
然后换了种二分,每次记录ans
嗯过了
哎大样例怎么多了5?
等下,好像可以双指针?
for的时候因为(g(i))是不断或进去的,那右边就是单调往右的
没毛病,这样(O(NlogN))了……完美
把二分删了
五六行写完,过了小样例
……怎么还是多5
仔细检查了一下,没问题啊
对拍对拍
把之前写的50分挪出来,写了个(N=10),(a le 31)的generator,run
……第一个就挂了
debug一下,发现在查左边时右边有个31把它挡住了,而右边的31又没有统计到
但两边都跑有重复啊……
哎不对,必须要保证正在枚举的是最大的
那判下大小?
小样例过了
第二个4个3的,6
……好像要小于等于
然后成了-6
……好像是一个小于一个小于等于
过了小样例
哇大样例对了
继续对拍,没问题
改成N=3000,没挂
然后AC此题