标算太NB 我觉得用这种做法,这道题难度只有2500 如果原图不是二分图显然无解。否则对于一个点数$\geq 2$的连通块的两边可以缩成两个点,它们不能染相同的颜色。对于独立的点可以新建一个$[0,10^9]$的虚点让这个点和虚点不染相同颜色。然后就变成了有$n$个区间、$\frac{n}{2}$对 ...
分类:
其他好文 时间:
2020-02-04 00:50:31
阅读次数:
111
主席树,即可持久化线段树,它是在权值线段树的基础上,记录了每个历史版本,从而可以方便快速的处理一些区间问题,最经典的应用有查询区间第 k 小。 当然,如果我们直接每次修改开一棵线段树,空间复杂度太大,肯定不行。但我们可以发现每次修改都只会改变一个结点的值,对于线段树来说,也就是只会有左儿子或者右儿子 ...
分类:
其他好文 时间:
2020-02-03 20:49:01
阅读次数:
70
区间k小数是主席树的模板题目,如果区间不包含,用莫队+权值线段树也能解 主席树是可持久化线段树,所为可持久化,就是每次只新增不一样的节点,而保留前面的版本,这样可以做到查询。 如果询问时1-r,那么直接主席树,询问的是l-r,就用到前缀和思想,具体看代码注释 #include<iostream> # ...
```#include #define ll long longusing namespace std;const ll maxn=2e5*5+10;struct re{ ll x,y,w,z;};re a[maxn];ll b[maxn];void up(ll k){ a[k].z=a[k*2].... ...
分类:
其他好文 时间:
2020-02-03 13:37:33
阅读次数:
84
题目大意:输入n,m,k。n个数,m个区间更新标记为1~m。n次操作,每次操作有两个数x,y表示执行第x~y个区间更新。 题解:通过差分来表示某个区间更新操作执行的次数。然后用线段树来更新区间。 #include<bits/stdc++.h> using namespace std; const i ...
分类:
其他好文 时间:
2020-02-03 13:30:02
阅读次数:
57
101. 最高的牛 题目链接:https://www.acwing.com/problem/content/103/ 作为一个银牌水平的主演数据结构的演员来说,这题现在发现非常好想,每个牛分配一个优先度。我搞一个区间线段树,每次update中间一段使得他们的优先度整体下降到比两端中较小的优先度还要小 ...
分类:
编程语言 时间:
2020-02-03 09:38:52
阅读次数:
77
线段树及其应用 [TOC] 线段树的几个基础操作:建树,单点查询,单点修改,区间查询,区间修改。其代码的主要思想为二分。参考博客: "https://blog.csdn.net/qq_39826163/article/details/81436440" 数据结构: 1.建树 建树的过程分为三步:1: ...
分类:
其他好文 时间:
2020-02-02 23:40:08
阅读次数:
91
pass 首先,个人觉得把这个数据结构理解成树状数组套主席树是十分不严谨的。主席树的本质是可持久化权值线段树与前缀和思想的结合。而动态主席树是可持久化权值线段树与树状数组思想的结合。并非树套树般的泾渭分明的叠加。 其次,大概讲下对动态主席树的理解。我们静态主席树中,第i个版本维护的是[1,i]的权值 ...
分类:
其他好文 时间:
2020-02-02 17:35:38
阅读次数:
71
离散化可以将无穷大集合中的若干个元素映射到有限集合中以便于统计的方法。在数据范围特别大而元素个数有限我们又需要遍历的时候,可以离散化一下,注意不同题目的离散化要求可能不一样,这里给出一种比较常见的离散化代码,不同题目要做相应的修改(比如线段树区间染色要将中间加个1): c++ include usi ...
分类:
其他好文 时间:
2020-02-02 14:06:00
阅读次数:
51
这道题其实除了一些细节,就是个线段树板子题。~~虽然我WA了不知道多少次,只是因为不等号方向写反。~~ ...
分类:
其他好文 时间:
2020-02-02 01:44:55
阅读次数:
99