随笔分类 -  数据结构——树状数组

摘要:严格上升的话,减1就好啦 阅读全文
posted @ 2019-07-30 09:59 WeiAR 阅读(127) 评论(0) 推荐(0) 编辑
摘要:Gym - 102082Ghttps://vjudge.net/problem/2198225/origin对于数列中任意一个数,要么从最左边到它不递减,要么从最右边到到它不递减,为了满足这个条件,就要移动,而移动的最少步数就是逆序对数。所以这个数要么往左移动,要么往右移动,所以两个取最小就好了 阅读全文
posted @ 2019-07-17 11:13 WeiAR 阅读(265) 评论(0) 推荐(0) 编辑
摘要:P1966 火柴排队进行映射,然后求逆序对即可。 阅读全文
posted @ 2017-11-08 19:35 WeiAR 阅读(153) 评论(0) 推荐(0) 编辑
摘要:P1168 中位数树状数组+二分答案。树状数组就是起一个高效查询比二分出来的数小的有几个。 阅读全文
posted @ 2017-11-07 14:04 WeiAR 阅读(259) 评论(0) 推荐(0) 编辑
摘要:P3402 最长公共子序列经典问题LCS-->LIS 没有重复的值才可以这么做把第一数列转化成1~n,然后将第二个数列映射成1~n中的一些数,然后求第二个数列的LIS即可,然后用Bit求LIS,O(nlogN) //数据太大,考虑map #include<iostream> #include<cst 阅读全文
posted @ 2017-10-17 16:30 WeiAR 阅读(243) 评论(0) 推荐(0) 编辑
摘要:树状数组解决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 阅读全文
posted @ 2017-10-17 16:06 WeiAR 阅读(1007) 评论(0) 推荐(0) 编辑
摘要:P2782 友好城市一道伪装得很好的dp,一开始没想出来,不相交就是所有的都在右边,也就是对于当前的城市i和它的友好城市的坐标都在城市j和它的友好城市的右边,这样就转化成了求最长上升子序列,f[i]表示选到北岸的第i个城市,能最多批准数,不断更新最大值。要小心Max,没有更新的情况,所以要o(max 阅读全文
posted @ 2017-10-17 09:32 WeiAR 阅读(183) 评论(0) 推荐(0) 编辑
摘要:树状数组在去年就会写会用了,记得去省选的时候66.7%的分数是靠树状数组得的。用法1:最开始用它是用它求逆序对,当前已经读了i个元素,比a[i]小的有query(i)个,那么比a[i]大而且比a[i]先读入的有i-query(a[i])个; 用法2:单点修改,区间求和 用法3:区间修改,单点查询这个 阅读全文
posted @ 2017-10-13 23:14 WeiAR 阅读(166) 评论(0) 推荐(0) 编辑