自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(35)
  • 收藏
  • 关注

原创 [BJOI2014]大融合 lct维护虚子树大小

lct在动态连边和删边方面比较有优势,但是在维护子树信息方面又没有树链剖分那么方便。这道题算是lct维护虚子树信息比较裸的一道题。以s[]数组为总的子树大小,sx[]数组为虚子树大小。要维护虚子树信息 在lct原来的模板上有三个地方需要改。pushup函数:总子树大小显然是实子树大小+虚子树大小I pushup(R x){ s[x]=s[lc]+s[rc]+sx[x]+1;}access函数:在进行access的过程,x的虚子树产生了变化,本来是y,后来变成了x现在的右儿子。...

2020-05-30 22:28:57 223

原创 D - Yet Another Yet Another Task 用线段树写水题

a[i]的数据范围瞬间让这题变成了水题 我们枚举区间最大值 (从0到30) 负数没必要 因为当区间长度为1时ans为0 是最小值 我们只保留小于等于这个枚举值的数 然后维护最小前缀和就行了 如果碰到大于枚举值的位置 我们把最小前缀和设为正无穷#include<stdio.h>#include<algorithm>using namespace std;const int N = 1e5+10;int ans,b[N],sum[N];int main(){...

2020-05-29 20:59:12 2779

原创 [HNOI2010]弹飞绵羊 lct维护siz

最近开始回顾lct和splay之类的东西了,学了的东西好容易忘记啊这题算是比较经典的题目吧,把i和i+a[i]连成一棵树,如果i+a[i]>n,就把i和n+1连起来,表示跑到了终点 对于1操作 1 x把链x,n+1拉出来 询问大小siz 答案就是siz-1(包含了n+1这个虚点)对于2操作 2 xy 把x和x+a[x](或n+1) 断开 更新a[x] 再把x和x+a[x](或n+1)连上为了方便下标改成了从1开始#include<bits/stdc++....

2020-05-29 14:42:01 131

原创 [HEOI2016/TJOI2016]排序 线段树合并+set or 二分+线段树

这题两种主流的做法:1.线段树合并,用set维护树的根结点。合并的时候直接暴力遍历set容器,合并两棵树的复杂度是logn的,分裂

2020-05-29 11:53:41 594

原创 洛谷 线段树分裂模板

对于0操作需要把区间x到y分裂出来变成一颗新的树(这像极了fhq的无旋treap) 我也用了类似的思想来实现线段树维护每个权值出现的个数 2,3,4操作应该都不是问题1操作的话就是线段树合并 没有什么特别的地方 对于y结点的删除 可以直接删 也可以把y结点放进内存池 我是用的内存池(不知道是不是这个名字。。。) 就是每删掉一个结点 可以把这个结点放入内存池 新建结点的时候 如果内存池有结点的话就从内存池里面取出结点 否则就新建一个结点 显然内存池可以减少空间复杂度 重复利用一些结点...

2020-05-26 11:55:55 158

原创 洛谷 [POI2011]ROT-Tree Rotations 线段树合并

参考博客:https://www.cnblogs.com/JYYHH/p/8777468.html这题从叶子结点开始 从下往上贪心就是正确的 贪心的思路就是 计算出左右两颗子树的顺序对和逆序对 然后取最小 一直向上合并线段树就行了 因此我们要维护siz(叶子节点的个数)#include<bits/stdc++.h>using namespace std;const int N = 2e5+10;int L[N*30],R[N*30],siz[N*30],tot,cnt,n,..

2020-05-25 09:22:23 155

原创 线段树合并 CF 600E Lomsat gelral

这题和[Vani有约会]雨天的尾巴有些神似的地方 算是线段树合并的模板题把 每个结点维护一颗线段树 线段树维护颜色出现个数 以及编号和 pushup要写好 想清楚 最后dfs合并起来就行了#include<bits/stdc++.h>using namespace std;const int N = 1e5+10;typedef long long ll;#define ls T[rt].l#define rs T[rt].rll ans[N];int h[N],...

2020-05-24 21:19:43 156

原创 lca板子 带常数优化

#include<bits/stdc++.h>using namespace std;const int N = 2000;int h[N],nex[N<<1],to[N<<1],tot;void add(int x,int y){ to[++tot]=y;nex[tot]=h[x];h[x]=tot;}int fa[N][30],dep[N],lg[N];void dfs(int u,int fath){ fa[u][0]=fath;dep[u]=d.

2020-05-24 19:16:46 351 1

原创 差分+线段树合并 [Vani有约会]雨天的尾巴

似乎这题主流做法是树剖 但是树剖怎么做啊 线段树合并我还没怎么学过 所以用线段树合并来做了首先对于每个操作肯定是差分来维护是最方便的 每个点我们建立一颗权值线段树 对于x y z 操作分别在树x,树y,树lca(x,y),树 fa[lca(x,y)] 上的z位置进行+1,+1,-1,-1的操作 这是典型的树上点差分然后我们由下而上的统计每棵树的答案就行了据说这种做法理论上只有nlogn的复杂的 不过常数巨大 可以比 nlognlogn的做法还慢一开始卡了...

2020-05-24 16:55:13 218 1

原创 2020 年 “游族杯” C.Coronavirus Battle 三维LIS

好菜啊 写个近乎板子的题写了个把小时这题看题意就知道最后的答案是求 ans[i] 表示以i点结尾的最长lis的长度 数据是随机的大概率不会有重复的点 但是为了保险我还是去了一下重 z这一维由于要用树状数组 我就离散了一下 然后套cdq板子就行了#include<bits/stdc++.h>using namespace std;const int N = 1e5+10;const int K = 1e5+10;typedef unsigned long long...

2020-05-23 17:19:18 257

原创 HDU - 4902 Nice boat 线段树维护最大最小值

题意:1操作让区间l~r的值为x 2操作让区间大于x的值为gcd(x,ai)我们维护区间最大值最小值 当最大值等于最小值时 区间的数都相同 这样可以减少2操作的时间 另外 对于mx[id]<=x的区间我们不必要在更新 也可以剪掉#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int N = 1e5+10;int a[N],ans[N];.

2020-05-22 15:10:07 264

原创 HDU多校 - 5316 Magician 线段树

更新的操作很简单 关键是0操作怎么做 我们要求一个子序列的最大和 这个子序列满足每两个相邻的项在原数组中的下标都是奇偶相交的那么肯定有4种情况(用o表示奇,e表示偶):oo,ee,oe,eo用线段树去维护这四种就行啦 注意初值应该是负无穷而不是0#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int N = 1e5+10;int a[N..

2020-05-22 13:27:07 231

原创 HDU - 5790 Prefix 求区间不同种数的变形

我们先看一个简单的问题 给你一个数组 q次询问 每个询问 给l和r 问区间l到r有多少种不同的数这个可以离线树状数组 ,离线线段树,还可以莫队 但是现在我要你在线解决那么就只能用主席树了 还是那个套路 我们建立第0棵树 然后在0棵树的基础上建立第一颗树 然后在第一棵树的基础上建立第2棵树。。。以此类推 如果我们在建立第i棵树时 发现val[i]在前面已经出现了 我们记录这个位置 然后在第i棵树里面 让这个位置-1 然后在i位置+1 这样对于询问l,r 我们查询第r棵树里面 ...

2020-05-22 09:46:41 1097

原创 HDU - 5788 Level Up 主席树+树状数组

我们先说明几个结论:一个人的能力变化只会影响自己和上司 当变化的下属的能力小于等于上司的中位数 那么这个中位数会向后移动一位 否则不变 (这个画图就能体会到)所以我们需要用主席树去查询 第mid个能力值 和 第mid+1个能力值 用树状数组去维护差值 枚举每一个点 并记录可以获得的最大差值 最后答案就是初始的能力值之和+最大差值 具体可以看代码解释#include<cstdio>#include<cstring>#include<algorithm>.

2020-05-21 19:56:54 326

原创 sql查询一个表中和自己姓相同的人

显然我们只知道这个查询的部分信息 所以我们需要用到模糊查询例如查询 univ.待聘人员中姓刘的人 select * from univ.待聘人员 where 姓名 like '刘%';

2020-05-21 10:30:15 1512

原创 sql给已有表添加或删除约束(主键约束,外键约束,check约束)

添加主键 给学生表添加主键:学号。语句如下: ALTER TABLE 学生 ADD PRIMARY KEY(学号); 删除主键 删除学生表的主键。语句如下: ALTER TABLE 学生 DROP PRIMARY KEY; 添加外键 给学生表添加外键:班级编号。班级编号是班级表的主键,该外键约束命名为fk_学生,语句如下: ALTER TABLE 学生 ADD CONSTRAINT fk_学生 FOREIGN KEY(班级编号) REFERENCES 班级;...

2020-05-21 10:16:26 17745 3

原创 Codeforces Problem 707D Persistent Bookcase bitset+dfs

题目链接:codeforces.com/contest/707/problem/D这个题用了比较巧妙的dfs 我们先来看 1,2,3 操作 这三个都很好做我们维护1000个bitset 在相应的书架上进行操作就好关键是4操该如何维护 乍一看这像是维护历史信息 得用可持久化的数据结构 后来我看了题解之后豁然开朗大家可以看链接:https://blog.csdn.net/queuelovestack/article/details/52269321大概意思就是我们根据询问建立起来一颗d...

2020-05-21 10:08:33 241

原创 整数三分/浮点三分模板

转自https://www.cnblogs.com/lukelmouse/p/12545973.html整数三分模板int l = 1,r = 100;while(l < r) { int lmid = l + (r - l) / 3; int rmid = r - (r - l) / 3; lans = f(lmid),rans = f(rmid); // 求凹函数的极小值 if(lans <= rans) r = rmid - 1; .

2020-05-19 21:07:39 588

原创 CF Round #643 (Div. 2) E - Restorer Distance

大佬说是三分裸题 于是我补了一下 确实挺裸的关于高度 显然是有一个cost 的峰值函数的 于是我们三分一个高度 然后进行计算记住计算的时候 要注意一个贪心 就是 当M<A+R的时候 我们先进行M操作#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N = 1e5+10;int n;ll A,R,M;ll H[N];ll checkmid(ll h){ ll a..

2020-05-19 20:07:58 1278

原创 CF Round #643 (Div. 2) C. Count Triangles

有人说这套题C比D和E 从过题的人数上来看确实这样 D题很好想 过的人很多 E题大佬说是三分裸题(大佬总能一眼看出)等下就补E我们来讲讲C题 其实有个很简单的而且细节也很少的方法 当时想了想 被队友叫去搞D了主要就是利用前缀和思想(虽然我求的是后缀)我们知道 在 X<=Y<=Z的情况下 要构成三角形就只有一个限制 那就是 X+Y>Z我们肯定要从a,b,c,d这几个范围下手先枚举最小的那条边a<=X<=b 从a到b枚举一遍对于第2条边 ...

2020-05-17 19:51:20 1008

原创 数据库 Oracle 创建新用户

打开cmd 输入sqlplus / as sysdba create user 账户名称identified by 密码; grant connect,resource to 账户名称; grant unlimited tablespace to 账户名称;第一步的时候可能会有权限问题如果是windows 10家庭版 请看https://blog.csdn.net/weixin_43824564/article/details/106095562...

2020-05-16 10:04:51 158

原创 CF Round #254 (Div. 1) C. DZY Loves Colors

我们维护区间最大值和最小值来判断区间的数是不是都相等 当更新操作更新很大的区间时 其后的更新操作(包括前一个更新区间的)复杂度就会降低 具体的证明我也不大会。。#include<bits/stdc++.h>using namespace std;const int N = 1e5+100;typedef long long ll;struct tree{ int ma,mi,l,r; ll val,lazy;}T[N<<2];void pushup(int..

2020-05-15 22:07:04 181

原创 CF Beta Round #19 D. Points 线段树

仔细看这个题是一个偏序问题 我们对x轴建立线段树 线段树上维护y的最大值 因为每个x都对应多个y 所以我们需要在叶子结点开一个set数组对于1,2操作 我们更新即可对于3操作 我们询问 区间 x+1~inf 这应该算个套路了 然后先询问左子树 保证是大于x的最小x 到了叶子结点 在经过set二分来找y 通过维护y的最大值 我们可以保证复杂度#include<bits/stdc++.h>using namespace std;const int N = 2e...

2020-05-15 20:56:40 172

原创 Codeforces Round #111 (Div. 2) E. Buses and People 线段树

这很像一个偏序的问题 但是我们要用线段树来解决它 仔细想想cdq应该也可 但是写起来比较麻烦我们就写线段树首先我们把人和车都按上车起始点排序 这样可以减少一维剩下还有终止点和时间这两维 我们对时间离散化 并且以时间(车辆的信息)开一棵线段树维护终止点的最大值 以及车辆的编号(应该是不存在时间相同的车的)对于每辆车 我们更新对应时间点的终止点以及车辆编号对于每个人 我们根据维护的终止点最大值 在pos~tot的区间上 去找最左端的合法点pos是这个人的时间离散后排的位...

2020-05-15 15:17:29 926

原创 科大讯飞杯 H-时空栈 线段树

题目链接:https://ac.nowcoder.com/acm/contest/5477/H题目有个要点就是 每个时间点t都只会出现一次 这样对于0操作 我们可以把它入栈的值放在这个时间点 对于入栈操作 我们把对应的时间点+1,对于出栈操作 我们把对应的时间点-1 然后我们来研究一下对于每次询问我们要找哪个点 (需要离散化时间点)区间 1 2 3 4 5 6 7值 - - - - - - -标记 0 0 0 0 0 0 0后缀和 0 0 0 0 0 0 0一开始是这样的...

2020-05-15 09:55:48 491

原创 cf Round #641 (Div. 2) D. Orac and Medians 思维

显然当某个区间(长度大于1)的中位数为k时,整个区间都可以变成k 但我们很难去找所有子区间的中位数 来确定它们是否为k我们得换个思路:https://www.luogu.com.cn/blog/Caro23333/codeforces-round-641-div1b-orac-and-medians-zhong-wen-ti-xie我们假设Ai==k Bi=1Ai<k Bi=0Ai>k Bi=2首先 数组里面必须包含k这个值其次 对于每个长度为3的区间 若这...

2020-05-14 16:23:52 215

原创 家庭版Windows10 解决 conn /as sysdba 命令登录win10系统的Oracle11g 出现insufficient privileges的问题

借鉴博文:https://blog.csdn.net/lolichan/article/details/84922794这个博主真的帮了大忙 本来忘记密码 搞的system被锁了 只有以操作系统登入才行 翻了很多博文 没找到解决方法 主要是我的电脑是家庭版的 没有本地和组这个选项对于家庭版的 有其他的解决方法 我觉得记一下 首先打开 Administration Assistant for Windows->Oracle Managed Objects->Com...

2020-05-13 12:47:00 956

原创 HDU 4348 主席树的区间更新(另类的lazy标记)

个人觉得主席树无法像普通线段树那样更新是因为 主席树很多结点都是共用的 假如在某个结点我们把lazy标记pushdown了 那么它可能会更新其他时间点的树 这样我们访问其他时间点的树的时候 会得到错误的答案所以另类的更新是 我们不把lazy标记pushdown 而是在query操作的时候沿途累加lazy标记 当到达的区间在访问区间内时 返回当前结点的值+区间长度*累加的lazy另...

2020-05-06 15:57:00 1056

原创 ZOJ - 2112 Dynamic Rankings 树套树(树状数组套主席树)

要理解这题的话 首先得理解一下主席树上面的前缀和思想 我们求区间L~R第k小的时候 是用R这颗树的值减去(L-1)这棵树的值 这其中暗含了 L~R的数值在值域上的分布(瞎说) 通过这个分布我们可以向第k小靠拢 R和L-1的差值 这不是显然的前缀和思想吗 那普通的主席树我们其实可以看成数组的前缀和 当我要知道 区间L到R的值时 我就访问 R和L-1的差值 并且这是不带修改的...

2020-05-05 20:28:39 192

原创 CERC2014 gym 100543L

这题完全没往dp上面想 害 有时候贪心和dp 还是很难分的开 该dp的写贪心大概率是只过样例的 一个比较好的方法是 看数据范围 但是这个也不完全准确 至于一些更进阶的方法 我也不晓得啊 有时候想个贪心也不知道对不对 想错误样例也想不到位 害 wo太难了这题对于每个区间找出d的最大值 然后枚举这个最大值对应的l和r作为决策点就行了#include<bits/stdc...

2020-05-05 10:03:12 176

原创 hdu 1823 线段树(非二维做法)

都说这题是二维线段树裸题,不过我二维线段树有点麻烦 也不太想写(还是得学的) 我就直接开200棵线段树了 这种方法在某一维很小的时候 是完全适用的 复杂度最多 100*1000*log(1000) 完全不虚#include<cstdio>#include<cstring>#include<algorithm>using namespace s...

2020-05-05 09:54:51 812

原创 Gym - 100519 B Bring Your Own Bombs 离散化+二分+思维

题目链接:https://vjudge.net/contest/370255#problem/B我们考虑每一行每一列会爆炸的概率是多少 显然 对于会爆炸的每一行 位于该行的矩形的长都会爆炸 对于会爆炸的每一列 位于该列的矩形的宽都会爆炸 但是对于 行列都爆炸的但我 我们显然重复计算了 所以要容斥一下#include<cstdio>#include<algor...

2020-05-03 18:48:44 186

原创 Gym - 100543B(BZOJ 4049 or UVALive 6928) 线段树维护凸包+二分

打湖南多校遇见的这套题 (Gym 100543B) 我们队做了四个水题 就不会了 其他题感觉难度都有所提高 还是得加强训练突破中档题本题链接:https://vjudge.net/contest/371507#problem/B先说明的是bzoj上似乎是单样例 UVA和cf上是多样例 另外个人建议拿cf交 UVA经常崩 什么对的代码提交wa的 也遇到过好几次了本题的思路来自大佬...

2020-05-03 18:29:05 292

原创 [NOI2002]银河英雄传说 边带权并查集

维护两个东西,深度和大小get操作:int get(int x){ if(x==fa[x]) return x; int rt=get(fa[x]); dep[x]+=dep[fa[x]]; return fa[x]=rt;}合并(unite)操作:void unite(int x,int y){ x=get(x),y=get(y);...

2020-05-01 17:39:48 286

原创 poj 1182食物链 扩展域并查集

这题也可以用边带权并查集,但是我觉得扩展域并查集更好理解。对于每个点x 有三个域 分别是 同类域,捕食域和天敌域当x和y是同类时,显然x和y的三个域对应相同当x吃y时,x的同类域和y的天敌域并起来,x的捕食域和y的同类域并起来,由题目知道x->y->z 之间成环 所以z是吃x的 所以x的天敌域要和y的捕食域并起来在并之前判断是否为真话如果x和y是同类 有两个冲突...

2020-05-01 10:55:23 142

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除