数据结构
文章平均质量分 53
NOI_yzk
我爱oi oi爱我
展开
-
并查集——关押罪犯
>题目:1401关押罪犯 题目描述 S 城现有两座监狱,一共关押着N名罪犯,编号分别为1~N。他们之间的关系自然也极不和谐。很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突。我们用“怨气值”(一个正整数值)来表示某两名罪犯之间的仇恨程度,怨气值越大,则这两名罪犯之间的积怨越多。如果两名怨气值为c 的罪犯被关押在同一监狱,他们俩之间会发生摩擦,并造成影响力为c 的冲突事件。每年年原创 2017-09-23 16:52:46 · 800 阅读 · 0 评论 -
区间第K值(可持久化线段树)
可持久化数据结构的一个经典应用 可以说是建k个线段树,但只用nlogn个节点 代码实现#include<bits/stdc++.h>using namespace std;#define FOR(i,x,y) for(int i=(x),i##_end__=(y);i<=i##_end__;i++)#define DOR(i,x,y) for(int i=(x),i##_end__=(y)原创 2017-12-01 14:57:04 · 377 阅读 · 0 评论 -
Trie树
一种用于检索的数据结构 大致就是开一个数组,记录节点 然后记录经过这个节点的字符串个数,以及这个节点表示的字符串个数 分别用pre pass end记录 复杂度大约为len∗mlen*mm为操作数,len为字符串长度 复杂度很小,但内存会比较大 代码实现如下:struct Trie_Tree{ static const int M=3000005; int pre[M][原创 2017-11-28 20:58:25 · 241 阅读 · 0 评论 -
数据结构学习——动态逆序对
解法一: 分块套BIT利用树状数组算最初的逆序对个数 nlognnlogn 利用树状数组算出块中比x小的数的个数 lognlogn 遍历x所在的那个块 n/Sn/S 总复杂度O(m(n/S+Slogn)+nlognm(n/S+Slogn)+nlogn) S取nlogn−−−−−√\sqrt{nlogn}时 O(mnlogn−−−−−√+nlogn)m\sqrt{nlogn}+nlog原创 2017-10-20 16:38:05 · 707 阅读 · 0 评论 -
STL数据结构小结
STL数据结构**1.队列 queue –> 优先队列 priority_queue 2.栈 stack 3.向量 vector 4.双向链表 list 5.集合 set –> 可重复集合 multiset 6.映射map**队列先进先出 push(x) 将x加入队列 pop( ) 将第一位移除队列 front( ) 队头元素 back( ) 队尾元素 size(原创 2017-09-16 13:22:48 · 432 阅读 · 0 评论 -
道路评价
题目描述 乐乐的家乡,进行了道路改进,n户人家,用n-1条道路连接,形成一棵树。 他想通过程序来评价一下这些道路的性能。从x点到达y点时,记录一下这条路上最长的边,和最短的边。 用它们的差值来表示x到y的方便程度。 乐乐想知道任意两户人家的方便程度之和。 输入 第一行一个整数n,表示有多少户人家。 接下来n-1行,每行三个整数a、b、c,表示有一条长的为c的边,连接编号为a原创 2017-10-04 08:08:27 · 666 阅读 · 0 评论 -
刺杀
题目描述 乐乐做了一个神奇的梦,他成为了一名刺客。 敌人要经过一片森林,这是刺杀的好机会。敌人共有n个,每个人有一个体力值x和子弹数y,表示如果乐乐徒手打败这个人需要消耗x点体力,打败这个人之后,他就会得到一把含有y颗子弹的手枪(这把手枪可以杀死y个人)。 乐乐刚开始只有s点体力,并且没有手枪(体力消耗后不会恢复,体力不能小于0)。 乐乐刺杀一名敌人,有两种方法:通过体力肉搏或者通过开枪原创 2017-10-02 19:33:23 · 614 阅读 · 0 评论 -
堆的实现
参照jjh神犇struct Heap{ Node W[M]; int sz; void Heap(){sz=0;} void push(Node x){ int p=++sz,q; while(q=p>>1){ if(x<W[q]) W[p]=W[q],p=q; else break;原创 2017-10-06 19:40:27 · 202 阅读 · 0 评论 -
看电视
> 2957.看电视 题目描述 最近有很多好看的电视节目要更新了。用[a,b]这个区间表示一个节目的播放时间。乐乐想知道如果他在[x,y]这段时间内有空,最多可以看多少个节目。请你帮他算算。 输入 第一行两个整数n,表示节目数。 接下来n行,每行两个整数a、b,表示一个节目在a时刻开始,在b时刻结束。第n+1行,一个整数m,表示有m个询问。 接下里m行,每行两个整数x、y。表示乐乐在原创 2017-09-26 16:25:01 · 861 阅读 · 0 评论 -
线段树
PART 1 单点更新,区间询问 1443区间和升级版 题目描述 这次的任务是:在伴随着数字改变的情况下,试试统计某段的和。 输入 第一行两个整数n和m,表示有一个长度为n个序列和m个操作 接下来m行,每行的内容属于以下一种: Change x a:把第x个数改成a Query x y:求出[x,y]这段区间的和。 输出 对于每个query,输原创 2017-09-17 08:42:33 · 409 阅读 · 0 评论 -
树上统计
解法很多,主要有主席树+dfs序 树上差分 树上启发式合并 线段树合并1.主席树+dfs序#include<bits/stdc++.h>using namespace std;#define FOR(i,x,y) for(int i=(x),i##_end_=(y);i<=i##_end_;i++)#define DOR(i,x,y) for(int i=(x),i##_end_=(y原创 2017-12-04 22:33:36 · 1531 阅读 · 0 评论