![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
破而后立呀
这个作者很懒,什么都没留下…
展开
-
2021年ECNU计科考研复试机试 B. 矩形个数(二维前缀和+二分或者尺取)
题面来自m大的网站https://www.malic.xyz/二维前缀和大家应该都懂吧,然后枚举每一个位置,对这个位置右下方的每一行进行二分,求每一行的第一个列坐标满足这个矩阵内1的个数大于等于k。时间复杂度n^3log(N),常数比较小。本地测了一下极限数据跑了半秒,应该能过,问了一下xyx大佬,大佬说枚举位置之后可以尺取做,我大概get到了吧哈哈哈,不想写了(其实是不会)样例过了我就没再测,希望各位大佬能给找找错。#include <bits/stdc++.h>us.原创 2021-05-20 18:01:47 · 422 阅读 · 1 评论 -
malic-2021年寒假热身-05 D - 楼高莫近危阑倚(DFS+树状数组)
记录入度,从而找到树的根结点,从根结点进行DFS,在向叶子结点搜索的时候将当前结点值加入树状数组,在回溯的时候再减去,这样每个子树就不会互相影响。。#include <iostream>#include <cmath>#include <set>#include <algorithm>#include <cstring>#include <cctype>#include <queue>#include .原创 2021-03-21 19:13:36 · 104 阅读 · 0 评论 -
ABC 170 E - Smart Infants(STL 模拟)
每个元素都属于一个集合,q次操作,每次都把一个元素从它目前所在的集合删除,然后放到另一个集合里面,每次操作之后问所有集合的最大值中的最小值是多少。用multiset模拟,注意对每一个小集合删除、添加之后,对维护答案的集合应该如何处理。#include <iostream>#include <cmath>#include <set>#include <algorithm>#include <cstring>#include .原创 2021-03-18 20:17:09 · 233 阅读 · 0 评论 -
表达式求值(中缀表达式转后缀表达式)
#include <bits/stdc++.h>using namespace std;struct node{ double num; char op; bool flag;};string str;stack<node> s;queue<node> q;map<char, int> m;void Change(){ double num; node temp; for (int .原创 2021-07-14 17:23:49 · 90 阅读 · 0 评论 -
atcoder 185 F - Range Xor Query
异或具有可前缀性,所以就是树状数组前缀和改成前缀异或#include <iostream>#include <cmath>#include <set>#include <algorithm>#include <cstring>#include <cctype>#include <queue>#include <vector>using namespace std;#define IO原创 2021-07-14 17:23:58 · 150 阅读 · 0 评论 -
atcoder 186 F - Rook on Grid(BIT+sort)
题意:给定n*m 的格子矩阵,一些位置上有障碍物,问从(1,1)出发两步之内能到达的格子数量。比较容易想到用树状数组,但是之后的细节比较多就写不对了。。假设一个格子坐标为(x,y),如果他的正上方或者正左边有障碍物,那么这个格子一定不能到达。那么我们就比较容易可以想到对一个格子看他右上有多少列有格子,这个地方也可以用树状数组查询,有两个特殊情况是第一行和第一列,对于这两个地方我们要添加额外的障碍物,也就是在不能从(1,1)向右直接到达的第一个格子后面全部加上障碍物,第一列同理。重要的就是排序原创 2021-07-14 17:24:28 · 130 阅读 · 0 评论 -
2020ICPC江西省赛 H.Sequence(线段树单点修改+查询)
题目大概意思:给定一个x做为下标,查询a[x]在多少个连续区间内是最小值,还有单点修改。比较容易想到运用线段树进行单点修改和查询,但是查询的时候要分别往x左边和右边查询,查询的目的是找到x左边第一个小于a[x]且最靠右的数组下标位置,同理右边找最靠左的第一个小于a[x]的下标,左边查询的时候优先查询右边,右边查询的时候优先查询左边,这样才能保证最佳,魔改线段树(其实也算不上魔改吧)细节挺多的,自己没调出来,请xyx大佬调的,还是码力太弱了。。。对于找不到小于a【x】这种情况要特殊处理一下。原创 2020-11-29 22:01:36 · 279 阅读 · 0 评论 -
The 2019 ICPC Asia Shanghai Regional Contest B.Prefix Code
比较容易想到用字典树,首先按照长度从大到小对字符串进行排序,每插入一个字符串,都对这个字符串路径上的所有结点上的val加1,然后倒序(从长度小的开始,因为长度小的更容易成为别的字符串的前缀)查询如果当前字符串的最后一个结点对应的val>1就说明,有另一个字符串至少可以到达当前结点,那么说明当前字符串是其他字符串的一个前缀。值得一提的是,这道题目如果不删除结点的话,会爆内存!!和poj2001很相似// #pragma GCC optimize(2)// #include <ran原创 2020-11-29 21:50:21 · 717 阅读 · 0 评论 -
P3369 【模板】普通平衡树(FHQ_treap平衡树)
// #pragma GCC optimize(2)#include <algorithm>#include <iostream>#include <sstream>#include <cstring>#include <cstdio>#include <random>#include <cctype>#include <bitset>#include <string>#incl.原创 2021-07-16 12:16:40 · 225 阅读 · 0 评论 -
P5788 【模板】单调栈
开个结构体分别记录元素下标和元素值,只需要记录每个元素是被哪个元素弹出去,开个数组记录答案即可。// #pragma GCC optimize(2)#include <algorithm>#include <iostream>#include <sstream>#include <cstring>#include <cstdio>#include <random>#include <cctype>#i.原创 2021-07-16 12:16:46 · 231 阅读 · 0 评论 -
L2-006 树的遍历 (25分)(二叉树重建)
通过后根和中跟遍历,不断确定左右子树// #pragma GCC optimize(2)#include <iostream>#include <cstdio>#include <algorithm>#include <queue>#include <cmath>#include <string>#include <vector>#include <stack>#include &l...原创 2021-07-18 19:52:59 · 138 阅读 · 0 评论 -
PTA L2-011 玩转二叉树 (25分)
已知二叉树先序和中序序列,重建二叉树,至于层次遍历只需要在重建完之后的二叉树上先入队右子树即。#include <iostream>#include <cstdio>#include <algorithm>#include <queue>#include <cmath>#include <string>#include <vector>#include <stack>#include <原创 2021-07-19 16:33:46 · 396 阅读 · 0 评论 -
POJ 2823(单调队列模板)
区间最大值最小值#include <iostream>#include <cstdio>#include <algorithm>#include <queue>#include <cmath>#include <string>#include <vector>#include <stack>#include <map>#include <sstream>#inc.原创 2021-07-19 16:33:52 · 151 阅读 · 1 评论 -
POJ 3321 Apple Tree(DFS序列+树状数组)
题目传送门之前做过一个类似的。https://blog.csdn.net/qq_44115065/article/details/105978281对于这个题目:只需要在树状数组上进行单点修改就可以。#include <iostream>#include <cstdio>#include <algorithm>#include <queue>#include <cmath>#include <string>原创 2021-07-21 12:47:58 · 136 阅读 · 0 评论 -
POJ2001 Shortest Prefixes(Trie树)
传送门题目大意:对于每一个字符串,求一个它的前缀串,使这个前缀串能够唯一确定这个字符串。空串不能看做前缀。还是更喜欢这种指针的写法。code:#include <iostream>#include <cstdio>#include <algorithm>#include <queue>#include <cmath>#include <string>#include <vector>#incl原创 2021-07-21 12:48:06 · 180 阅读 · 0 评论 -
牛客小白月赛 25 点击消除(栈)
我当时是乱搞过的乱搞代码:// // // #include <iostream>// // // #include <cstdio>// // // #include <algorithm>// // // #include <queue>// // // #include <cmath>// // // #include <string>// // // #include <ve...原创 2021-07-21 12:48:24 · 199 阅读 · 0 评论 -
POJ 1655 Balancing Act 树的重心
树的重心定义:删除掉某个结点后,以这个结点的子节点为根的子树大小最小。dp的思想,dfs过程类似树链刨分,有注释。#include <iostream>#include <cstdio>#include <algorithm>#include <queue>#include <cmath>#includ...原创 2021-07-22 10:22:48 · 223 阅读 · 2 评论 -
Hdu3974 Assign the task(DFS序建立线段树)
题意:一个人只有一个boss,一开始呢所有人都没有任务,当给一个人安排任务时,他的所有下属也被安排了这个任务,包括他下属的下属,根据题意这是一颗有根树。那我们就可以找到根结点,从根结点开始DFS,从而得到每个结点的dfs序列(dfn)和以这个结点为根的子树的大小(size),然后我们就可以借助这两个数组建立线段树,进行区间修改和单点查询。区间修改的时候修改结点x那就是将任务分配给结...原创 2021-07-22 10:22:53 · 196 阅读 · 0 评论 -
2020年西北工业大学“编程之星”程序设计挑战赛 G 智乃与无意义的题目
用线段树进行维护,对每一个叶子结点质因数分解,得到它2 ,3,5,7做为因子的个数,向上合并的时候累加相同因子个数,最后查询的时候用因子个数公式计算得到。线段树太强了!!!好久没敲了。。。#include <iostream>#include <cstdio>#include <algorithm>#include <queue&g...原创 2021-07-23 20:11:59 · 304 阅读 · 0 评论 -
2020年西北工业大学“编程之星”程序设计挑战赛 A 张经理的员工(二维树状数组)
思路: 二维数组维护,分别维护前缀工位个数和 前缀工位坐标和,其实这样的题目做过至少两次了,思路比较容易得到,但是敲得还是有点慢,变量怕搞错。、。、。#include <iostream>#include <cstdio>#include <algorithm>#include <queue>#include ...原创 2021-07-23 20:12:03 · 305 阅读 · 2 评论 -
poj 1990 MooFest(树状数组)
这个题目和寒假牛客第三场的G非常类似。传送门题目大意:每头牛都有一个听力值,还有它所在位置。两头牛交流所消耗的能量为两头牛距离差值*两头牛中听力值最大的一个。我们要求任意两头牛交流所需要的的能量和。共n*(n-1)。可以用树状数组维护当前牛之前的牛的个数,和当前牛之前的牛的坐标和。当然首先需要根据听力值排序,这样就保证了能量和最小。然后逐个得添加到树状数组中然后查询就可以了...原创 2021-07-23 20:12:11 · 350 阅读 · 2 评论 -
F. Find my Family (dp预处理+set二分)
传送门题目意思:给定一个数列,找到任意三个数字 a[i],a[j],a[k],i<j<k && a[k]>a[i]>a[j]首先逆序预处理出每个数字并且包括这个数字右边最大的值。然后从左到右扫一遍,结合set进行二分查找出刚刚 比当前数字大的数,然后判断是否满足条件。#include <iostream>#include ...原创 2021-07-23 20:12:43 · 1129 阅读 · 0 评论 -
D.Cell Phone Contacts (UCF “Practice” Local Contest — Aug 24, 2013 )
模拟就好,但是注意细节,运用了几个stl。思路:先记录下所有人的名字,然后再用名字在排完序的数组中的序号去找名字对应的emal和number,再对这俩排序。#include <iostream>#include <malloc.h>#include <cstdio>#include <algorithm>#include &...原创 2021-07-24 12:16:20 · 672 阅读 · 0 评论 -
L2-4 彩虹瓶 (25分) 栈的运用
代码虽然写的有点乱,但是还是过了哈哈。主要就是模拟题目那个意思,仔细点就好了。#include <iostream>#include <malloc.h>#include <cstdio>#include <algorithm>#include <queue>#include <stack>#inc...原创 2021-07-24 12:16:55 · 565 阅读 · 0 评论 -
牛客第四场 子段乘积
线段树的运用 线段树真np 真好用,真强题目链接https://ac.nowcoder.com/acm/contest/3005/C直接扫一遍维护区间 会出现 遇见 0 处理麻烦的问题直接用线段树 这一问题将会不复存在 将普通的区间加 变成 区间 * 就可!#include <iostream>#include <malloc.h>#include...原创 2021-07-24 12:17:12 · 177 阅读 · 0 评论 -
C. Yet Another Walking Robot
题目意思:给一个字符串,每种字符都代表一个坐标变换,让求删除一个最短的子串(不为空)使得删除这个子串后最终坐标点位置不变,找到了输出子串的起始位置和结束位置,若找不出这样一个子串,那么输出-1,字符串下标从1~n。这样记录某个坐标点上一次出现的时间,肯定得想到用map啊!记录就好了另外再说一下,map的count是判断这个元素有没有被赋值过,例如,map <int,i...原创 2021-07-25 22:07:57 · 1885 阅读 · 7 评论 -
P1886 滑动窗口 /【模板】单调队列
给出n个数和窗口大小 ,窗口不断向右边滑动,求每滑动一次窗口中的最大值或者最小值单调队列快快地打上,线段树,rmq的不要!#include <cstdio>#include <iostream>#include <cstring>#include <algorithm>#include <queue>#include ...原创 2021-07-26 09:52:58 · 365 阅读 · 0 评论 -
P5490 【模板】扫描线 面积并
#include <algorithm>#include <iostream>#include <cstring>#include <cstdio>using namespace std;typedef long long ll;const int maxn = 1000000 + 10;struct Line{ ll L,...原创 2021-07-26 09:53:18 · 170 阅读 · 0 评论 -
树状数组操作
lowbitint lowbit(int x){ return x & (-x);} // 表示非0整数它的最低位1和它后面的0所表示的数的值单点修改void add(int x, int k) // x 为修改为止 k为位置上的增加值{ while (x <= n) { c[x] += k; x +...原创 2021-07-27 15:16:07 · 156 阅读 · 1 评论 -
主席树模板!!区间第k小(大)代码主要参考b站up主 AgOH
区间第k大查询#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#include <vector>using namespace std;const int maxn = 1000 + 10;struct Node{ ...原创 2021-07-26 09:53:48 · 195 阅读 · 0 评论 -
二叉树(链式存储和数组存储) 代码分别来自B站up主 正月点灯笼和挑战程序设计
链式存储插入的时候其实是按照二叉搜索树的规则进行插入的Tree 结构记录的是这个数的根节点#include<iostream>#include<stdlib.h>using namespace std;typedef struct node{ int data; struct node* left; struct node* right; }N...原创 2021-07-28 10:46:01 · 399 阅读 · 0 评论 -
线段树 自己的模板
修改的时候要pushdown 查询的时候也要下放标记xyx说过:要多下放几次标记模板仅供参考#include<iostream>#include<cstring>#include<cstdio>#include<algorithm>using namespace std;typedef long long ll;const ...原创 2021-07-27 15:17:52 · 164 阅读 · 5 评论 -
Parentheses Balance uva—673
本来想找个水题涨涨自信呢,但是被折磨得不轻,题目的坑点在与连续输入,会导致回车符也会读入到字符串中 ,换行符也是个字符!!!!要有针对的方法,可以看到代码里的两种方法,均可以将换行符读入,这样对字符串处理就可以了,如果不读入换行符,那么就会对下一次输入造成影响。仔细看看代码吧~#include<cstdio>#include<cmath>#inc...原创 2021-07-28 10:46:14 · 196 阅读 · 0 评论