"D. Multiset" 后面才知道 的复杂度是$O(n)$的,所以 t 了很多次。 当需要进行很多次插入和删除第 k 位数这两种操作的时候,可以用树状数组来对其进行优化, 表示的就是 i 这个数在当前序列里排的位置,求第 k 位数的大小可以用二分进行优化,这样复杂度就是$O(log(log(n) ...
分类:
其他好文 时间:
2020-05-20 18:44:45
阅读次数:
52
题目描述:n个点有速度,有位置,问所有的点对最小距离之和为多少 解法1:离散化 + 树状数组 基本上做出来的都是用的这个方法,不多介绍,看代码吧 #include<bits/stdc++.h> using namespace std; const int maxn=200010; const int ...
分类:
其他好文 时间:
2020-05-19 20:12:18
阅读次数:
70
D - Multiset 题目大意:给一个长度为n的数组a,有q次操作,每次输入一个数k,如果k是正数则插入a数组中,负数就删除 下标为-k的数,下标从1-n; 思路:用树状数组维护每个数前面有几个数,即是第几大,插入一个数add操作,删除用二分查找,找到那个数。 code #include <io ...
分类:
其他好文 时间:
2020-05-19 18:38:23
阅读次数:
60
涵盖知识点:解析几何、树状数组 比赛链接: "传送门" "A Alarm Clock" 题意: 一天要睡够$a$分钟,但是$b$分钟后有一个闹钟会使其醒来,他会把闹钟推迟到$c$分钟之后,然后花费$d$小时再次入睡。问要多久能够睡够。 题解: 模拟推公式 Accept Code: "C2 Not S ...
分类:
其他好文 时间:
2020-05-18 18:15:01
阅读次数:
66
人生第一道树套树的题,看着bin巨的代码才学会,太累了,文字明天补 #include<bits/stdc++.h> using namespace std; const int maxn=60010; int n,q,m,tot; int a[maxn]; int t[maxn]; int T[ma ...
分类:
编程语言 时间:
2020-05-17 01:13:19
阅读次数:
56
树状数组 求和 $C[i]$表示数组$A$中的一段连续和,具体是哪一段,由下式确定: $C[i]=A[i 2^k+1]+A[i 2^k+2]+...+A[i]$ 其中$k$为$i$的二进制数中从最低位到最高位连续零的长度,如对于$8(1000)$,$k=3$ $SUM[i]$表示数组$A$的前$i$ ...
分类:
编程语言 时间:
2020-05-17 01:02:48
阅读次数:
65
增加一个数就update(x,1) 减去这个数就update(x,-1) 查看是否有某个数就query(x)-query(x-1)是否>0 看比a大k的数就二分查找query值为query(a)+k的数 http://www.tzcoder.cn/acmhome/problemdetail.do?& ...
分类:
编程语言 时间:
2020-05-15 18:33:55
阅读次数:
73
【lowbit】 1 #define lowbit(x) x&(-x) 【单点修改】 1 void add(int pos, int k) 2 { 3 while (pos <= n) 4 { 5 tree[pos] += k; 6 pos += lowbit(pos); 7 } 8 } 【区间询问 ...
分类:
编程语言 时间:
2020-05-14 01:51:06
阅读次数:
93
输入一个长度为n的数组,有以下两种操作: 1.输入一个数m,输出数组中下标1~m的 前缀和 2.对指定下标的 数值进行修改 我们有两种思路,一种是for循环累加,另一种是利用前缀和数组。两种算法多 次操作时间复杂度在O(n^2),我们不妨来用树状数组进行操作。 树状数组介绍(BIT,Fenwick ...
分类:
编程语言 时间:
2020-05-12 20:47:32
阅读次数:
103
地址:http://acm.hdu.edu.cn/showproblem.php?pid=1754 解析:先说update操作。c[]表示所管辖的区间范围里的最大值。 void update(int id,int x) { while(id<=n) { c[id]=x; for(int i=1;i< ...
分类:
编程语言 时间:
2020-05-12 18:43:37
阅读次数:
55