随笔分类 - 数据结构——树状数组
摘要:Gym - 102082Ghttps://vjudge.net/problem/2198225/origin对于数列中任意一个数,要么从最左边到它不递减,要么从最右边到到它不递减,为了满足这个条件,就要移动,而移动的最少步数就是逆序对数。所以这个数要么往左移动,要么往右移动,所以两个取最小就好了
阅读全文
摘要:P1168 中位数树状数组+二分答案。树状数组就是起一个高效查询比二分出来的数小的有几个。
阅读全文
摘要:P3402 最长公共子序列经典问题LCS-->LIS 没有重复的值才可以这么做把第一数列转化成1~n,然后将第二个数列映射成1~n中的一些数,然后求第二个数列的LIS即可,然后用Bit求LIS,O(nlogN) //数据太大,考虑map #include<iostream> #include<cst
阅读全文
摘要:树状数组解决LIS O(nlogn)之前写过二分查找的LIS,现在不怎么记得了,正好用Bit来搞一波。f[i]表示以a[i]结尾的LIS的长度。t[x]表示以数值x结尾的LIS的长度。即t[x]=max(f[j]),a[j]==x,j<i。f[i]=max(t[x])+1,x<a[i]或x<=a[i
阅读全文
摘要:P2782 友好城市一道伪装得很好的dp,一开始没想出来,不相交就是所有的都在右边,也就是对于当前的城市i和它的友好城市的坐标都在城市j和它的友好城市的右边,这样就转化成了求最长上升子序列,f[i]表示选到北岸的第i个城市,能最多批准数,不断更新最大值。要小心Max,没有更新的情况,所以要o(max
阅读全文
摘要:树状数组在去年就会写会用了,记得去省选的时候66.7%的分数是靠树状数组得的。用法1:最开始用它是用它求逆序对,当前已经读了i个元素,比a[i]小的有query(i)个,那么比a[i]大而且比a[i]先读入的有i-query(a[i])个; 用法2:单点修改,区间求和 用法3:区间修改,单点查询这个
阅读全文