数据结构
Elliott__
这个作者很懒,什么都没留下…
展开
-
实验一 链表及其多项式相加
题目链接<http://acm.zjnu.edu.cn/DataStruct/showproblem?problem_id=1001>实验一 链表及其多项式相加Time Limit: 1000MS Memory Limit: 65536KTotal Submissions: 2579 Accepted: 978Description通过有序对输入多项式的各个项,利用单链表存储该一元多项...原创 2018-04-17 17:50:13 · 3870 阅读 · 0 评论 -
【启发式合并】【主席树-查询区间不同数的个数】HDU - 6504 - Problem E. Split The Tree
题目链接<http://acm.hdu.edu.cn/showproblem.php?pid=6504>题意:一棵树上,每个点都有一个权值。一棵树的价值是不同的权值数量,这棵树去掉一条边后拆成两棵树,问这两棵树的最大价值和是多少。题解1:首先考虑到dfs序的性质,每棵子树都在序列上成一段。把这个序列复制一遍,变成长度为2*n的序列。这样问题就变成了区间内不同数的个数...原创 2019-04-21 20:11:04 · 461 阅读 · 3 评论 -
【线段树】“美登杯”上海市高校大学生程序设计邀请赛(华东理工大学)E. 小花梨的数组
题目链接https://acm.ecnu.edu.cn/contest/173/problem/E/题意:在一个数组上有三种操作区间乘最小素因子区间除最小素因子查询单点值题解:因为如果先乘后除就会抵消,最后一定是:除除除除乘乘乘乘,维护一个线段树的lazy标记,记录每一个区间的除法个数和乘法个数。做除法的时候,先在乘法个数里面减,然后有剩余在除法个数里面加。做乘法就直接往乘...原创 2019-05-18 19:30:25 · 132 阅读 · 0 评论 -
【想法+线段树】Codeforces - 1187 - D. Subarray Sorting
【题目链接】http://codeforces.com/contest/1187/problem/D题意:给出两个数组a,b,对数组a选任意多个子串进行排序,问能否构造出数组b题解:对于b[i],在数组a[i]中找到最左边且值相等的位置p,把a[p]两两交换地调到i这个位置。这样的话需要满足条件a[i]~a[p]<=a[p]。开一个队列,记录每个权值所在的位置。判断区间最小值,...原创 2019-07-14 20:13:19 · 216 阅读 · 0 评论 -
【主席树 + 三角形构造】HDU - 6601 - Keen On Everything But Triangle
题目链接http://acm.hdu.edu.cn/showproblem.php?pid=6601题意给出一个数组,有若干次询问。每次询问一个区间,在区间内挑出能组成三角形的三个数字,问三角形周长最大是多少。题解从最大的数字开始考虑,每次取紧邻的三个,如果存在三角形就输出。最坏的情况下,数组是个斐波那契数列,这样只要取44个最大数就行了。所以每次主席树暴力扫出前50个最大数,然后...原创 2019-07-24 19:11:18 · 342 阅读 · 0 评论 -
【离散+线段树】HDU - 6606 - Distribution of books
题目链接http://acm.hdu.edu.cn/showproblem.php?pid=6606题意有n个数字,取一个前缀,分成k块。要求每块的最大值最小,问最小是多少。题解官方题解:题目要使得最大值最小?考虑二分答案对于每次二分答案(假设为x),如何判定x能否满足分为k份的要求呢?考虑动态规划令dp[i]表示前i个数最多能分成几段, 则:dp[i]=max(dp[j])+1...原创 2019-07-30 19:41:16 · 122 阅读 · 0 评论 -
【线段树 + 线性基的交】2019牛客暑期多校训练营(第四场) - B - xor
题目链接https://ac.nowcoder.com/acm/contest/884/B题意给出n个集合,q个询问。每次询问一个区间,问区间内的集合是否有一个子集异或得到询问的值。题解官方题解#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N=5e4+7;st...原创 2019-07-30 21:28:30 · 265 阅读 · 0 评论 -
【线段树】HDU - 6602 - Longest Subarray
题目链接http://acm.hdu.edu.cn/showproblem.php?pid=6602题意给出一个数组,问你最长的子区间,使得区间内的元素要么不出现,要么至少出现k次。题解#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N=1e5+7;int t[N...原创 2019-07-26 16:52:22 · 207 阅读 · 0 评论 -
【笛卡尔树】2019牛客暑期多校训练营(第四场)- C - sequence
题目链接https://ac.nowcoder.com/acm/contest/884/C题意给出一段序列,要求出max(min(al...r)∗sum(bl...r))max(min(a_{l...r})*sum(b_{l...r}))max(min(al...r)∗sum(bl...r))。题解先处理出每个a[i]做最小值的范围。然后就是要求出左右两个区间,前缀和的最大值和最小...原创 2019-07-27 20:47:23 · 204 阅读 · 0 评论 -
【线段树合并】BZOJ - 2733 - [HNOI2012]永无乡
题目链接https://www.lydsy.com/JudgeOnline/problem.php?id=2733&tdsourcetag=s_pctim_aiomsg线段树合并模板题学习一下#include<bits/stdc++.h>using namespace std;typedef long long ll;typedef double db;con...原创 2019-08-06 20:04:17 · 126 阅读 · 0 评论 -
【分治 + 并查集】2019牛客暑期多校训练营(第八场)- E - Explorer
题目链接https://ac.nowcoder.com/acm/contest/888#question题意给出一张图,每条边都有一个区间。只有在区间内的数才能经过这条边。问有多少个数使得能从点1走到点n题解离散之后,在线段树上添加每条边。然后在线段树上dfs分治,如果当前区间添加的边(包括自己区间的边和所有祖先上的边)已经使得1和n在一个并查集内,则直接添加答案return。否则继续...原创 2019-08-12 20:02:46 · 153 阅读 · 0 评论 -
【可持久化字段树】HDU - 6191 - Query on A Tree
题目链接http://acm.hdu.edu.cn/showproblem.php?pid=6191题意给出一棵树,树上每一个节点都有一个权值。每次询问一个数x和一棵子树,问子树上的一个点和x的异或值最大是多少题解可持久化线段树模板题#include<bits/stdc++.h>using namespace std;typedef long long ll;typ...原创 2019-08-16 19:47:39 · 191 阅读 · 0 评论 -
【线段树】The 2019 Asia Yinchuan First Round Online Programming?- L - Continuous Intervals
题目链接https://nanti.jisuanke.com/t/41296题意给出一个序列,统计区间值域是连续的个数题解对于一段区间,如果max[l,r]−min[l,r]+1=cnt[l,r]max[l,r]-min[l,r]+1=cnt[l,r]max[l,r]−min[l,r]+1=cnt[l,r],那么这段区间就是符合条件的。枚举右端点rrr,那么就是要统计多少个lll,使...原创 2019-09-02 15:40:38 · 211 阅读 · 0 评论 -
【CDQ分治/带修主席树】The 2019 Asia Nanchang First Round Online Programming Contest - I - Yukino With Subint
题目链接https://nanti.jisuanke.com/t/41356题意给出一个序列,有两个操作修改一个数字询问一段区间内数字在一定范围内的最长连续段有多少。题解按照题解的思路把原数组aaa转变为bbb,其中b[i]=a[i]b[i]=a[i]b[i]=a[i]当且仅当a[i]≠a[i−1]a[i]=\not a[i-1]a[i]≠a[i−1],否则b[i]=0b...原创 2019-09-10 13:16:35 · 239 阅读 · 0 评论 -
【笛卡尔树 + 二分】Codeforces Round #586 (Div. 1 + Div. 2) - F - Gardener Alex
题目链接https://codeforces.com/contest/1220/problem/F题意给出一个排列,每一次操作可以把最前面的数字放到最后面。问至少要几次操作,可以使得对此时的排列建笛卡尔树深度最小。题解每次把最左边的数放到最右边,那么对于根节点的左右两棵子树,左边子树的深度一定是非递增的,右边子树的深度一定是非递减的。所以我们可以先二分出一个位置得出最小深度,然后再二分...原创 2019-09-19 19:44:55 · 400 阅读 · 0 评论 -
【线段树】Educational Codeforces Round 73 (Rated for Div. 2) - F. Choose a Square
题目链接https://codeforc.es/problemset/problem/1221/F题意二维平面内有n个带权值的点,要求出一个两点在直线y=xy=xy=x上的正方形,使得覆盖点的权值之和减去正方形的边长最大。题解假设正方形的坐标为(ax,ax)(ax,ax)(ax,ax),(ay,ay)(ay,ay)(ay,ay),如果点(x,y)(x,y)(x,y)在正方形内,那么ax...原创 2019-09-25 16:11:59 · 187 阅读 · 0 评论 -
【LCA+主席树】SPOJ - COT - Count on a tree
题目链接<https://cn.vjudge.net/problem/SPOJ-COT>题意:在一棵树上每个点都有一个权值,有若干次询问,每次询问一条简单路上的权值第k小。题解:主席树主要利用前缀和的性质来确定范围内的值,并用线段树得出答案。本题是建立在树形结构上,所以应当想办法在树上利用前缀和求出范围的权值线段树。很容易想到跟lca有关。如果我们dfs树,并对树上...原创 2019-03-21 21:55:22 · 218 阅读 · 0 评论 -
【线段树】Codeforces - 1136 - E. Nastya Hasn't Written a Legend
题目链接<http://codeforces.com/contest/1136/problem/E>题意:有一串数组a和数组k,数组初始保证a[i]+k[i]≤a[i+1]。一共有两种操作:查询区间和 对第i位加上x,如果a[i]+k[i]>a[i+1],则a[i+1]=a[i]+a[k],并一直往后。题解:一个数组本身,第i位表示的是第i位取1次的值;...原创 2019-03-21 15:28:03 · 190 阅读 · 0 评论 -
PAT L2-002. 链表去重
题目链接<https://www.patest.cn/contests/gplt/L2-002>L2-002. 链表去重时间限制300 ms内存限制65536 kB代码长度限制8000 B判题程序Standard作者陈越给定一个带整数键值的单链表L,本题要求你编写程序,删除那些键值的绝对值有重复的结点。即对任意键值K,只有键值或其绝对值等于K的第一个结点可以被保留。同时,所有被删除的结...原创 2018-03-29 14:11:50 · 134 阅读 · 0 评论 -
实验二 括号匹配判断算法
题目链接<http://acm.zjnu.edu.cn/DataStruct/showproblem?problem_id=1002>实验二 括号匹配判断算法Time Limit: 1000MS Memory Limit: 65536KTotal Submissions: 2202 Accepted: 924Description假设在表达式中([]())或[([ ][ ])]等为正确...原创 2018-04-19 16:14:28 · 3228 阅读 · 0 评论 -
实验三 KMP算法
题目链接<http://acm.zjnu.edu.cn/DataStruct/showproblem?problem_id=1005>实验三 KMP算法Time Limit: 1000MS Memory Limit: 65536KTotal Submissions: 1479 Accepted: 756Description给定一个源串s和n个子串stri。判断stri是否是s的子串。...原创 2018-04-24 19:30:57 · 1222 阅读 · 0 评论 -
由先序遍历和中序遍历序列建立二叉树
题目链接<http://acm.zjnu.edu.cn/DataStruct/showproblem?problem_id=1008>//zjnu<http://poj.org/problem?id=2255>//poj题解:一、递归建树,递归输出就行。这个代码在poj上能过,zjnu会上re#include <iostream>#include <cs...原创 2018-05-30 19:29:07 · 8437 阅读 · 4 评论 -
【Trie树求最大异或】HDU - 4825 - Xor Sum
题目链接<http://acm.hdu.edu.cn/showproblem.php?pid=4825>题意:有一个集合,里面含有n个数。有m次询问,每次询问一个数和集合里面的数异或,使得到的值最大,应该和哪个数异或。题解:利用Trie树,将n个数的32位二进制从高位开始放进树中。将询问的数字在树里贪心的查询,这样复杂度是n*32。l#include<ios...原创 2018-08-17 19:48:25 · 221 阅读 · 0 评论 -
【主席树】HDU - 2665 - Kth number
题目链接<https://www.luogu.org/problemnew/show/P3834>题意:求区间内第k小数。题解:主席树裸题。主席树整体思想:利用前缀和的权值线段树,计算出区间的权值,然后利用线段树求出第k大。#include<iostream>#include<stdio.h>#include<algorithm&...原创 2019-03-14 16:06:18 · 165 阅读 · 0 评论 -
分治算法和数据结构在多维偏序问题中的应用
友情连接<https://blog.csdn.net/qq_40513946>分治算法和数据结构在多维偏序问题中的应用Authors: 刘浩,万昱君Student ID (浙江师范大学 数学与计算机学院,学号201732110113,201732110118)摘要:对于二维偏序的计算问题,我们可以用暴力O(n2)的算法来做。但我们可以通过树状数组和分治来优化,使复杂度达...原创 2019-01-17 00:31:09 · 585 阅读 · 0 评论 -
三维CDQ
题目链接<https://cn.vjudge.net/problem/HYSBZ-3262>题解:一共有三维:一维排序,一维CDQ,一维树状数组。每一次CDQ分治都需要清空数组。注意:数值一样的花会互相影响,可以去重,然后加一个权重来处理。#include<bits/stdc++.h>#define ll long longusing namesp...原创 2018-12-25 12:51:21 · 206 阅读 · 0 评论 -
CDQ分治 - 单点修改区间查询
题目链接<https://www.luogu.org/problemnew/show/P3374>题解:一共有两维,一维是操作的时间,一维是操作的位置。一开始时间是排好序的,只需要对位置这一维分治统计。利用前缀和的思想,把答案记为sum[r]-sum[l-1],所以把查询操作拆成两个:r和l-1。#include<bits/stdc++.h>#defin...原创 2018-12-25 12:47:36 · 448 阅读 · 0 评论 -
【扫描线+离散+线段树】【面积并&面积交&周长并】HDU - 1542 && HDU - 1255 && HDU - 1828
【面积并】HDU - 1542 - Atlantis题目链接<http://acm.hdu.edu.cn/showproblem.php?pid=1542>题意:给出若干个矩形的坐标,矩形之间存在重叠。问所有矩形覆盖的总面积是多少。题解:对于每个矩形抽象成两条线,每一个线记录:x轴坐标,上端点坐标,下端点坐标。另外对于每一条线记录一个属性val,如果这个线是矩形左边...原创 2018-12-02 19:55:00 · 1178 阅读 · 0 评论 -
线段树合集
POJ - 2528 -Mayor's posters题目链接<http://poj.org/problem?id=2528>题意:在范围为1e9的瓷砖上,依次覆盖1e4张海报,每张海报各不相同,问最后能看到的海报有多少张。题解:离散加区间修改和最后一次的区间查询。离散有两种考虑方式:离散边界,也就是说对于瓷砖区间r+1或者l-1。 离散区间,这样容易忽...原创 2018-12-02 19:54:38 · 147 阅读 · 0 评论 -
字节跳动冬令营网络赛 - B - Origami
题目链接<https://ac.nowcoder.com/acm/contest/296/B>题意:在一张长度为n的纸片上从左到右写上1~n的数字。每次从左或从右反复折叠,使得最后只有一个单位的长度。这样从上到下就会得到一个序列。给出一串序列问能否最后折叠出来。题解:直接画一下纸张折叠最后形成的样式,就可以发现题目可以翻译成:给出左右两串区间,要求每一串区间之间可以包含...原创 2018-12-01 19:23:51 · 758 阅读 · 3 评论 -
【拓扑排序】Gym - 101503 - I.Just Matrix
题目链接<http://codeforces.com/gym/101503/problem/I>题意:有一个n*n的矩阵,里面的数字为1~n*n,给出每个位置在它上边和左边有多少个大于它的数。构造出这么一个矩阵。题解:可以得知每一行每一列的大小顺序,每一行每一列从小到大依次连边。如果从小到大依次填入数字,这样就能够确定因果关系。然后做一次拓扑排序判断有无结果并输...原创 2018-11-01 18:28:08 · 152 阅读 · 0 评论 -
【扫描线】Gym - 101982 - F - Rectangles
题目链接<http://codeforces.com/gym/101982/attachments>题意:给出若干个矩形,求出被奇数个矩形覆盖的面积。题解:题目很类似于扫描线的矩形面积并,联想一下那题的做法:把一个矩形拆成两条线段,赋值1和-1,代表入边和出边。对所有线段排序,在线段树上维护值为正数的大小。本题是要求奇数,所以线段树应该维护的是值为奇数的大小。再仔细...原创 2019-03-17 21:17:59 · 410 阅读 · 0 评论 -
【区间更新主席树/标记永久化】HDU - 4348 - To the moon
题目链接http://acm.hdu.edu.cn/showproblem.php?pid=4348题意C l r d:时间标记加一,区间[l,r]的数增加dQ l r:询问当前[l,r]的和H l r t:询问t时刻,区间[l,r]的和B t:回到时间t题解区间更新主席树模板题区间更新线段树主要有两个写法:一是lazy标记下传,二是lazy标记永久化。如果要对主席树里的...原创 2019-10-10 21:02:51 · 436 阅读 · 0 评论