摘要:
"传送门" 解题思路 首先分块预处理,设$sum[i][j]$为第$i$块到第$j$块的逆序对数量,$g[i][j]$表示前$i$块数值$ include include include include using namespace std; const int N=50005; const in 阅读全文
摘要:
"传送门" 解题思路 感觉自己设的状态非常$SB$。设$f[i][j]$表示$i,j$作为这个等差数列的末尾时的最大值,那么$f[i][j]=f[k][i]+1(a[i] a[j]=a[k] a[i])$。发现这样是$O(n^3)$的,发现这样做有用状态很少,可以拿个$map$记录一下第$i$个数差 阅读全文
摘要:
"传送门" 解题思路 $trie$的一个比较经典的应用,首先把每个点到根的异或和算出,然后建一棵$trie$把所有权值插入到$Trie$中,之后枚举所有结点,在$Trie$上贪心的跑统计答案,时间复杂度$O(nlogn)$ 代码 cpp include include include using n 阅读全文
摘要:
"传送门" 解题思路 出题人真会玩。。操作$2$线段树合并,然后每棵线段树维护元素个数和。对于$6$这个询问,因为乘积太大,所以要用对数。时间复杂度$O(nlogn)$ 代码 阅读全文
摘要:
"传送门" 解题思路 直接按奇偶层染色是错的,$WA$了好几次,所以要树形$dp$,感觉最多$log$种颜色,不太会证。 代码 cpp include include include include include using namespace std; const int N=10005; in 阅读全文
该文被密码保护。 阅读全文
摘要:
"传送门" 解题思路 线段树合并,考虑交换两个子树时,对除这两棵子树外的其余点的逆序对不会造成影响,所以我们只需要贪心的使这两棵子树产生的逆序对最小。而考虑时我们也只需要考虑两棵子树间的逆序对数,不需要考虑每棵子树内部逆序对数,这样就非常好算了,可以线段树合并,合并的同时统计一下交换前和后的逆序对数 阅读全文
摘要:
"传送门" 解题思路 首先最大值很好求,直接造出来线性基贪心即可。次大值的话就枚举哪一位跟最大值不同,然后异或上即可。 代码 cpp include include include include using namespace std; const int N=100005; inline int 阅读全文
摘要:
"传送门" 解题思路 首先一定不可能有$ 1$的情况,因为新产生的黑点不会造成任何贡献,它的各个方面都是不优的。那么只需要统计一遍答案,首先要将横坐标相同的两个点看成一条竖线,纵坐标相同的点看成一条横线,然后从下往上扫描,遇到竖线的下端点时,在树状数组里$+1$,遇到竖线上端点时,$ 1$,然后遇到 阅读全文