树状数组
~LIM_
这个作者很懒,什么都没留下…
展开
-
hdu2852
题目链接 题意: 给出m个询问 (1)在容器中加入e (2)在容器中删除e (3)找出容器中大于a的第k个数 题解: 前两个操作可以在树状数组中完成 第三个操作需要找到一个最左边的数数x,满足sum(x)>=sum(a)+k,这个过程在树状数组上二分即可 #include<iostream> #include<algorithm> #include<cstdio> #include<cstring> #include<queue> #in原创 2021-05-18 12:21:31 · 113 阅读 · 0 评论 -
谜一样的牛(树状数组+二分)
题解: 可以发现一个规律:当某头牛前面有n头牛比他矮时,他的身高就是没用过的牛中第n+1矮的。 我们定义一个sum数组,该数组a[i]的值表示1-i的前缀和,如果某头牛的身高为x,前面有n头牛比他矮,则一定满足sum(x)=n+1,显然该过程可以用一个树状数组来实现。 当然sum(x)=n+1还不能完全满足,比如说 假设我们需要从以上的牛中找到第二矮的,sum(2),sum(3)和sum(4)都等于2,由于第三头牛和第四头牛都被用过了,所以我们需要找到一个最小的k,使得sum(k)=n+1,所以这个..原创 2021-05-17 22:39:38 · 164 阅读 · 1 评论