![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构系列
文章平均质量分 78
phython96
ACM退役~
展开
-
北京区域赛I题,Uva7676,A Boring Problem,前缀和差分
A Boring Problem题解其实这题不难,只要想到了前缀和差分就基本OK了.我们要求的是第iii项的式子:F(i)=(a1+a2+...+ai)k+(a2+...+ai)k+...+(ai)kF(i)=(a_1+a_2+...+a_i)^k+(a2+...+a_i)^k+...+(a_i)^kF(i)=(a1+a2+...+ai)k+(a2+...+ai)k+...+(ai...原创 2018-11-07 13:00:23 · 595 阅读 · 0 评论 -
P2468 [SDOI2010]粟粟的书架 动态规划,主席树,二分答案
题目洛谷题目链接题解题目的数据范围非常奇怪,一半是200∗200200∗200200*200的矩阵,另一半是1∗500001∗500001*50000的矩阵,显然是一道二合一的题目,但是不一样的地方也就在与数据结构的选择不一样,而我们解这道题使用的算法是一样的,即都是二分法。这道题所需要的数据结构应该能提供如下的功能:在O(1)O(1)O(1)或O(logn)O(logn)O(...原创 2018-05-07 16:56:08 · 213 阅读 · 0 评论 -
P3157 动态逆序对 ,树状数组套动态开点线段树
题目洛谷题目链接题解在求整体的逆序对的数量时,很好办,直接用树状数组处理即可,不过在这时,我们还需要处理出一个数组pa[]pa[]pa[],其中pa[i]pa[i]pa[i]代表在区间[1,i)[1,i)[1,i)中满足aj>aiaj>aia_j>a_i的ajaja_j有多少个。然后我们再利用一个新的BITBITBIT,并且倒着遍历a[]a[]a[]数组,这样我们可...原创 2018-05-07 16:21:43 · 254 阅读 · 0 评论 -
codeforces gym-101736 Farmer Faul 平衡树+并查集
题目题目链接题意给出nnn个整数,其中1≤n≤1061≤n≤1061≤n≤10^6。 给出三种操作:GROW x y,表示给xxx位置的数增加yyy。MAGIC x,表示给所有的数增加xxx。CUT x,表示把所有大于x的数切割到x,并输出本次切割割了多少。题解乍一看,似乎没有很符合这个题目情形的数据结构,我们需要把多种数据结构结合起来。首先我们把所有...原创 2018-04-23 08:32:27 · 374 阅读 · 2 评论 -
洛谷 一种堆套路 P1631序列合并、P2085最小函数值
题目链接序列合并 最小函数值题解这两道题做法基本一样,是使用同一种套路解决的,这里用序列合并来举例说明。序列合并要求出N2N2N^2个和中最小的N个数。我们用一个堆来维护我们需要的数,并且保证当前最小值一定在堆中。 把a和b排个序。 这个堆首先要加入的就是(a[1]+b[i]),1≤i≤n(a[1]+b[i]),1≤i≤n(a[1]+b[i]),1≤i≤n这n个数字。 ...原创 2018-03-22 11:10:23 · 184 阅读 · 0 评论 -
洛谷P1801 黑匣子 双堆套路的使用
题意题目链接题解这道题本可以用Treap暴力求解出来,但是不够优雅,因为没有充分利用到题目中给的条件,那就是要求的ithithith小的值的iii是单调递增的。我们用两个堆来维护,大顶堆和小顶堆。 大顶堆中的元素是排好序的前i−1i−1i-1个,小顶堆里的元素个数是排好序的后n−i+1n−i+1n-i+1个。 这样每次询问的时候,我们只需要输出小顶堆中的最小的元素就ok了。...原创 2018-03-22 10:57:06 · 232 阅读 · 0 评论 -
洛谷P2278操作系统 模拟+堆
一道模拟题竟然活生生的不会模拟,感觉自己好菜啊。在模拟的时候,一定要弄清楚要对什么进行模拟。题解进程的等待队列是一个优先队列,优先队列是以优先级降序作为第一关键字,以进入时间为第二关键字。在操作系统这道题目中,我们依据任务到达来驱动我们对进程的执行模拟。记录上个任务到来的时间为now,本次任务到来的时间为tim。 (即上次中断的时间和本次中断的时间,是进程能够执行的时间...原创 2018-03-22 10:41:47 · 189 阅读 · 0 评论 -
codeforces gym-101741 Elevator 动态规划、单调队列
题目这里写链接内容题解注意:题目给出是按照时间给出的顺序。我们考虑第iii个人要上的楼高h[i]h[i]h[i],排在第iii个人前面的,所有要人上的楼高度≤h[i]≤h[i]≤h[i]的人都可以被合并在与第iii个人一起被传送上去。所以我们只需要考虑h[i]h[i]h[i]单调递减的序列就可以了,其它的人我们都可以删掉不看,因为它已经被合并了。例如: 一个hhh序列...原创 2018-04-07 22:01:11 · 367 阅读 · 0 评论 -
codeforces G - Almost Increasing Array 动态规划、动态开点线段树
题意给出一个序列,允许删除一个元素,并将任意元素的值修改为任意整数,问最少修改多少个元素使得序列变成严格单调递增的序列?题解这道题目很具有启发性: 不考虑删除元素,原数列各个数值减去他们下标得到一个新的序列,那么新的序列的最长不减序列就是不需要修改的元素个数len,需要修改的元素个数就是n-len即可。这道题也是这么做的,我们枚举要删除的元素下标为kkk,并且得到以元素k−1...原创 2018-03-14 13:02:37 · 276 阅读 · 0 评论 -
洛谷 动态规划一日游 P2577、P1070、P2051
记2018年3月19日贼颓呢,一天就写了两道DP,还都不会写,这可GG。 动态规划真的难且有趣,算法题中动态规划占到了很大的比例,而且动态规划往往是辅助解决一些其他类型问题的基础,加深加强对动态规划问题的认识和训练非常有必要。P2577 午餐题意题意见题目链接题解这道题目本质上是一道背包问题,是背包问题的变形,这道题不同的地方在于有两个背包。 因此,...原创 2018-03-19 20:00:44 · 300 阅读 · 0 评论 -
NEERC2017 Archery Tournament 线段树 新套路
题目链接http://codeforces.com/gym/101630/attachments/download/6401/20172018-acmicpc-northeastern-european-regional-contest-neerc-17-en.pdf题意给出一些圆,这些圆圆心在x轴上方,且与x轴相切,任意时刻,不存在图上的圆相交,给出两种操作:增加一个圆;向图中发送一...原创 2018-06-03 18:48:05 · 366 阅读 · 0 评论 -
伸展树模板
伸展树模板#include <iostream>#include <cstdio>#define pr(x) std::cout << #x << " : " << x << std::endlclass SplayTree{public: struct Node{ int val;原创 2018-09-25 09:15:48 · 163 阅读 · 0 评论 -
牛客练习赛29 题解
根据裴蜀定理,当存在一些x的组合,使得它们的gcd为1的时候,p1x1+p2x2+...+pnxn=1p_1x_1 + p_2x_2 + ... + p_nx_n = 1p1x1+p2x2+...+pnxn=1,方程一定有解.因此我们就求gcd(x1,x2,...,xn)=1gcd(x_1,x_2,...,x_n) = 1gcd(x1,x2,...,xn)=1的方案数即可记f...原创 2018-10-19 22:45:57 · 442 阅读 · 3 评论 -
清明梦超能力者黄YY[树链剖分+扫描线,线段树合并]
清明梦超能力者黄YY题目连接https://www.nowcoder.com/acm/contest/206/I暂时有两种做法.算法一涉及:树链剖分,扫描线在一个线段的情况下,我们可以把一个染色区间拆成左端点处增加事件,右端点处删除事件.维护一颗权值线段树.这样,端点从小到大扫描时,遇到增加事件就在线段树指定位置+1,遇到删除事件就在线段树指定位置-1.那么要回答一个点的答案只需...原创 2018-10-22 13:37:10 · 427 阅读 · 0 评论 -
线段树-Chossing Ads-分治,主元素思想,神题
Choosing Ads问题提出给出长度为nnn的序列AAA,以及数ppp(20≤p≤10020\le p \le 10020≤p≤100)QQQ次操作,两种类型(1,l,r)(1,l,r)(1,l,r),区间赋值为vvv(2,l,r)(2,l,r)(2,l,r),区间出现频率≥p%\ge p\%≥p%的数n,Q≤105n,Q \le 10^5n,Q≤105问题解答非常巧...原创 2018-10-08 15:17:29 · 272 阅读 · 0 评论 -
线段树-区间的交
区间的交题目来源孙耀峰Segment_Tree.pdf 原创题目描述给定nnn个区间,[li,ri][l_i,r_i][li,ri],可以选出其中一些区间,设选出tottottot个,令xxx表示这tottottot个区间交的长度.求min{x,tot}min\{x,tot\}min{x,tot}n≤105,1≤xi≤yi≤nn \le 10^5,1 \le x_i \le y_...原创 2018-10-08 13:58:27 · 302 阅读 · 0 评论 -
线段树-Mex-洛谷P4137
Mex问题提出有一个长度为nnn的数组{a1,a2,…,an}\{a_1,a_2,…,a_n\}{a1,a2,…,an}。mmm次询问,每次询问一个区间内最小没有出现过的自然数。题目解答对1−n1-n1−n这里能够的每个数xxx,都统计出来在数组中出现的位置,并在前补上000,在后补上n+1n+1n+1.例如数组{1,2,3,2,1}\{1,2,3,2,1\}{1,2,3,2,1}...原创 2018-10-08 10:28:01 · 165 阅读 · 0 评论 -
线段树-HDU5737-这题有点神
HDU5737题意[1][1][1]有长度为nnn的序列A,BA,BA,B[2]Q[2]Q[2]Q此操作两种类型(1,l,r,x)(1,l,r,x)(1,l,r,x)将区间[l,r][l,r][l,r]的aia_iai覆盖为xxx(2,l,r)(2,l,r)(2,l,r)询问区间[l,r][l,r][l,r]中有多少ai≥bia_i \ge b_iai≥bi题解考虑用线段树...原创 2018-10-07 22:50:16 · 153 阅读 · 0 评论 -
线段树-Pudding Monster CF526F-单调栈
Pudding Monster题目连接:https://www.luogu.org/problem/show?pid=CF526F问题提出给长度为nnn的排列AAA.问有多少(l,r)(l,r)(l,r),使得将Al,Al+1,...,ArA_l,A_{l+1},...,A_rAl,Al+1,...,Ar排序之后是连续的一段数.n≤105n \le 10^5n≤105问题解决...原创 2018-10-08 10:06:37 · 603 阅读 · 0 评论 -
线段树专题-黑白棋盘 BZOJ-1453
线段树专题-黑白棋盘题目来源bzoj−1453bzoj-1453bzoj−1453题意QQQ次操作每次操作给出(x,y)(x,y)(x,y),将(x,y)(x,y)(x,y)个格子颜色取反每次操作后,输出棋盘上黑白联通块的个数n≤100,Q≤104n \le 100,Q \le 10^4n≤100,Q≤104题解显然不能直接套线段树,因为直接套线段树的时间复杂度为O(n2Q)...原创 2018-10-04 10:56:00 · 297 阅读 · 0 评论 -
线段树专题-等差子序列 BZOJ-2124
线段树专题—等差子序列感谢感谢孙耀峰的线段树PPT,使我获益匪浅.题目来源BZOJ−2124BZOJ-2124BZOJ−2124题意给出长度为nnn的1−n1-n1−n的排列AAA问是否存在一组1≤p1≤p2≤...≤pl≤n,l≥31 \le p_1 \le p_2 \le ... \le p_l \le n,l \ge 31≤p1≤p2≤...≤pl≤n,l≥3使得Ap1...原创 2018-10-04 10:37:15 · 237 阅读 · 0 评论 -
codeforces 940E Cashback 有趣的dp
题解 这么明显的一个dp,我怎么就没看出来呢?! 首先我们需要一些前提条件:任何划分出来的一个区间的长度不应该超过c。 如果这个区间长度大于c,那么设len=n∗c+klen=n∗c+klen=n*c+k,那么这个区间应该被分成n个长度为c的区间和一个长度为k的区间,因为这样的话去掉的元素数量是相同的,并且区间更小有利于较小的值不易被取到。因为每次去掉的最小值仅仅是局部最小值,...原创 2018-02-24 22:51:12 · 723 阅读 · 0 评论 -
Treap模板
前言打ACM这么久了,竟然还不会写平衡树,趁寒假有时间赶紧学一波,听说有个叫Treap的实现起来比较简单。声明struct node{ int key,prio,sz; int ch[2];}treap[maxn];//key是存储在节点内部有意义的值//prio是随机优先权,用于平衡树堆//sz表示该节点子树的大小int tot,root;//t原创 2018-01-29 21:56:02 · 136 阅读 · 0 评论 -
Boring Homework 二叉搜索树的打印,模拟
写了好长时间,注意递归的使用,思路一定要清晰。还有注意的地方:打印的时候一定要先打印到缓存buffer中,然后再输出到屏幕上面。#include using namespace std;int idx = 0;int val[100],lft[100],rgt[100];int num[100][2];int root;void insert(int &rt,int x){原创 2017-10-08 19:48:53 · 245 阅读 · 0 评论 -
Query on a graph HDU5957 沈阳ICPC重现赛
Query on a graphTime Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 369 Accepted Submission(s): 81Problem DescriptionYou are give原创 2017-08-17 20:49:46 · 603 阅读 · 0 评论 -
2017西安交大ACM小学期数据结构 [分块,区间修改,单点查询]
Problem A发布时间: 2017年6月28日 09:29 最后更新: 2017年6月28日 13:03 时间限制: 1000ms 内存限制: 32M描述给定一个长度为n的序列a1, a2, ..., an给出q个操作, 操作分为两种对于形如1 x y z的操作, 将下标介于[x,y]的元素加上z, 满足1≤x≤y≤n, 1≤z≤原创 2017-07-03 08:48:30 · 338 阅读 · 0 评论 -
2017西安交大ACM小学期数据结构 [分块、二维矩阵]
Problem B发布时间: 2017年6月28日 10:06 最后更新: 2017年6月28日 16:35 时间限制: 2000ms 内存限制: 32M描述给定一个n×m的矩形, 其中第i行第j列的值为ai,j给出q个操作, 操作有两种对于形如1 x1 y1 x2 y2 z 的操作, 将(x1,y1)-(x2,y2)这段矩形区域的所有元原创 2017-07-03 15:54:40 · 388 阅读 · 0 评论 -
2017西安交大ACM小学期数据结构 [线段树]
Problem B+发布时间: 2017年7月1日 02:08 最后更新: 2017年7月1日 02:10 时间限制: 1000ms 内存限制: 64M描述给定一个长度为n的序列a1, a2, ..., an, 满足这个序列是一个1~n的排列如果一个序列满足: 将序列排序后, 任意两个相邻的元素的差为1, 那么就称这个序列为"胖虎序列原创 2017-07-03 18:52:54 · 344 阅读 · 0 评论 -
2017西安交大ACM小学期数据结构 [树状数组]
Problem C发布时间: 2017年6月28日 11:38 最后更新: 2017年6月28日 16:38 时间限制: 1000ms 内存限制: 32M描述给定一个长度为n的序列a1, a2, ..., an, 其中ai∈[1,10]给出q个操作, 操作分为两种对于形如1 x y的操作, 将ax改为y, 满足1≤x≤原创 2017-07-03 18:58:57 · 269 阅读 · 0 评论 -
2017西安交大ACM小学期数据结构 [树状数组,极大值]
Problem D发布时间: 2017年6月28日 10:51 最后更新: 2017年6月28日 16:38 时间限制: 1000ms 内存限制: 32M描述给定一个长度为n的序列a1, a2, ..., an当k满足2≤k≤n−1, ak>ak−1且ak>ak+1时, 将元素k称为极大值点,给出q个操作, 操作分为两种对原创 2017-07-03 19:05:10 · 289 阅读 · 0 评论 -
2017西安交大ACM小学期数据结构 [树状数组 离散化]
Problem E发布时间: 2017年6月28日 12:53 最后更新: 2017年6月29日 21:35 时间限制: 1000ms 内存限制: 64M描述给定一个长度为n的序列a1, a2, ..., an给定两个整数L, R输出有多少个二元组(x,y),x≤y, 满足L≤∑yi=xai≤R9×104≤n≤105, −原创 2017-07-03 19:11:15 · 303 阅读 · 0 评论 -
codeforces 848C C. Goodbye Souvenir cdq分治
C. Goodbye Souvenirtime limit per test6 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputI won't feel lonely, nor will I be sorr原创 2017-09-05 23:52:46 · 674 阅读 · 0 评论 -
codefoces730C Bulmart 二分答案+贪心check && 堆维护
C. Bulmarttime limit per test1.5 secondsmemory limit per test512 megabytesinputstandard inputoutputstandard outputA new trade empire is rising in Berland. Bulma原创 2017-08-29 10:57:45 · 699 阅读 · 1 评论 -
可持久化线段树小结
学了可持久化线段树有一段时间了,一直没拿出时间来整理一下,刚好今天有空,就写一写。可持久化的含义是对于每次修改操作都将产生一个新版本的线段树,并且旧版本的线段树仍然保留可以随时访问。基于这个目的,我们可以采用类似动态开点的方法构建一颗线段树。 假设我们已经有了一个版本的线段树,我们要对这个线段树进行操作,我们首先复制前一颗线段树的根节点,然后在执行修改操作的时候,把所有途经的节点全部新建原创 2018-01-23 14:00:54 · 615 阅读 · 0 评论 -
一道数据结构题,求k阶逆序数
#include <bits/stdc++.h>using namespace std;#define int long long const int maxn = 1e5+10;const int mod = 1e9+7;const int maxm = 12;struct bt{ int bitree[maxn]; void init(){ memse原创 2017-12-04 08:46:13 · 231 阅读 · 0 评论 -
Problem G. Graph 2015-2016 acmicpc neerc 拓扑排序模拟
一道好题题目详见题目连接G graph显然模拟拓扑排序的步骤是必不可少了。假设我们当前有t个点,他们的入度均为0.我们不知道该选取哪一个。我们把这t个点按从小到大排好序(放入小顶堆),假设我们目前有k条边(k 现在问题来了,我们给前k个点加一条边,保证了这k个点不被取到,但是,我们怎么知道这条边的父节点是谁呢?没错,我们确实不知道,但是我们目前还不需要知道,所以我们打上标记,可原创 2017-10-07 11:36:05 · 299 阅读 · 0 评论 -
codeforces 877F F. Ann and Books hash+莫队算法
题意:给你一堆数字,每个数字有正负之分,求任意区间内和为k的子区间的个数。题解:先把前缀和都求出来,构成一个数组sum。建立一个hash表,然后考虑区间sum[l,r],从左到右扫,每扫到一个前缀sum[i],从把答案加上hash_table[sum[i] - k],并且hash_table[sum[i-1]]++;这是对于固定区间的做法,要用莫队得证明区间左右端点移动的时间复杂度原创 2017-10-28 13:42:31 · 317 阅读 · 0 评论 -
codeforces 878C Tournament平衡树,好题!!!!
C. Tournamenttime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputRecently a tournament in k kinds of sports ha原创 2017-10-28 13:01:15 · 1182 阅读 · 0 评论 -
Summer training day6 codeforces19E 树链剖分,并查集
E. Fairytime limit per test1.5 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputOnce upon a time there lived a good fairy A. One原创 2017-08-10 20:50:38 · 281 阅读 · 0 评论 -
Summer Training day6 codeforces240F 线段树、回文串
F. TorCodertime limit per test3 secondsmemory limit per test256 megabytesinputinput.txtoutputoutput.txtA boy named Leo doesn't miss a single TorCoder contest ro原创 2017-08-10 21:14:14 · 241 阅读 · 0 评论