![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Data Structure
文章平均质量分 64
秋水忆秦谣
三更灯火五更鸡,正是男儿读书时。 黑发不知勤学早,白首方悔读书迟。
展开
-
POJ 3630 Phone List
Trie树。题意是问某个数字可不可能是其他数字的前缀。就是裸的字典树。排序然后插进去就好了。#include#include#include#include#include#include#include#include#include#include#include#define INF 0x7fffffff#define eps 1e-6原创 2014-07-16 19:23:48 · 711 阅读 · 0 评论 -
HDU 1509 Windows Message Queue
水题,用来熟悉优先队列。有两个键,一个是优先级,一个是ID。按优先级排,优先级一样就按ID排。#include#include#include#include#include#include#include#include#include#include#include#include#define INF 0x7fffffff#define e原创 2014-10-16 10:48:02 · 714 阅读 · 0 评论 -
HDU 1873 看病要排队
优先队列,水题。三个医生,对应三个优先队列就可以了。多组数据要初始化优先队列#include#include#include#include#include#include#include#include#include#include#include#include#define INF 0x7fffffff#define eps 1e-8#defi原创 2014-10-16 11:08:37 · 895 阅读 · 0 评论 -
POJ 2104 K-th Number
题意是说给出n个数。然后给出一个查询(left,right, k) 给在left 和right 之间的数排序之后 输出第k大的数。高级数据结构搞我完全不会啊。连线段树怎么做这道题都没有思路。只想到了一个排序然后找的办法,只要数据卡一下就过不了。。。以后学了其他方法一定要回来搞。#include#include#include#include#includ原创 2015-01-27 18:47:29 · 594 阅读 · 0 评论 -
POJ 2528 Mayor's posters
题意是说给出一连串的展板,有10000000块。然后要贴n (0最后能看到多少个广告。我的做法是 先离散化数据,然后构建线段树。然后查询。不离散化那么 树所需要的空间就太大了。注意这个样例31 51 34 5如果答案是3那么是错的。因为每个点代表一块板。而不是算两个数字之间的区间有没有被覆盖。PS:貌似我的办法原创 2015-01-27 12:18:07 · 691 阅读 · 0 评论 -
POJ 2823 Sliding Window
题意很简单,给出n,m。查询连续m个数的最大值和最小值。我用线段树 裸的。有人用的单调队列。不过很忧伤的是G++ TLE,但是C++ AC了。#include#include#include#include#include#include#include#include#include#include#include#include#includ原创 2015-01-27 15:13:45 · 622 阅读 · 0 评论 -
第五届蓝桥杯C/C++本科B组(真题试做)(9~10)
第九题 迷宫取宝标题:地宫取宝 X 国王有一个地宫宝库。是 n x m 个格子的矩阵。每个格子放一件宝贝。每个宝贝贴着价值标签。 地宫的入口在左上角,出口在右下角。 小明被带到地宫的入口,国王要求他只能向右或向下行走。 走过某个格子时,如果那个格子中的宝贝价值比小明手中任意宝贝价值都大,小明就可以拿起它(当然,也可以不拿)。 当小明走到出口时,原创 2015-01-29 17:30:11 · 1123 阅读 · 0 评论 -
HDU 1754 I Hate It
线段树解决,类似的,数状数组也行。点修改,区间查询 都是 logn 的复杂度。没有使用自底向上的ZKW线段树写法,就普通的递归线段树。#include#include#include#include#include#include#include#include#include#include#include#include#include#defi原创 2015-01-11 20:28:02 · 567 阅读 · 0 评论 -
POJ 2299 Ultra-QuickSort
求逆序对个数。暴力 n^2 TLE妥妥的。要么 归并排序的时候统计,要么线段树或者数状数组优化。时间复杂度都是 n*logn线段树求逆序数怎么写呢。例如样例的 9 1 0 5 4其位置pos 为0 1 2 3 4再来一个数组设为0 0 0 0 0线段树先插入 (9,0),把插入的位置 0 变成 1。1 0 0 0 0然后统原创 2015-01-13 11:35:06 · 531 阅读 · 0 评论 -
HDU 1394 Minimum Inversion Number
题意是求逆序数。先无脑用线段树求出原数列的逆序数。然后:不过是把一个数列的第一个数放到最后。这样重复n-1次。在新数列中找出最小的逆序数。假如第一个数是 a[i] 那么放到最后之后,新数列的逆序数为原数列的逆序数减去比 a[i]小的数,加上比 a[i]大的数。即 ans=ans-2*a[i]+n-1; 这样就必须把输入的数列存下来。#include#i原创 2015-01-16 15:01:04 · 514 阅读 · 0 评论 -
第五届蓝桥杯C/C++本科B组(真题试做)(6~8)
终于考完……不过挂科的铁定的了。还是来做题吧。前面八道题做起来都很简单。F:标题:奇怪的分式 上小学的时候,小明经常自己发明新算法。一次,老师出的题目是: 1/4 乘以 8/5 小明居然把分子拼接在一起,分母拼接在一起,答案是:18/45 (参见图1.png) 老师刚想批评他,转念一想,这个答案凑巧也对啊,真是见鬼! 对于分子原创 2014-12-31 20:53:26 · 915 阅读 · 0 评论 -
HDU 2795 Billboard
题意很简单。有高度为 h ,宽度为 w 的广告板。 要插入 n条广告。把 h 用线段树进行维护,即通过线段树找到每次插入哪一行,每次插入时需同时更新。不过我在奇怪的地方RE了几次。。。神奇……#include#include#include#include#include#include#include#include#include#includ原创 2015-01-20 11:29:32 · 648 阅读 · 0 评论 -
HDU 1698 Just a Hook
题意是说TF的 钩子换了某些节之后价值多少。最开始为铜的。价值为1,银价值为2,金价值为3.长度为 n ,接下来的操作可以将某一段的钩子换成 铜,银,金的某一种。其实就是线段树的区间修改。直接修改区间所有 为某一个值。 核心思想就是延时。大白书上p204~p207有详细讲解。不过貌似大白书上的maintain函数不能直接使用前面区间增减的。#includ原创 2015-01-20 15:40:14 · 625 阅读 · 0 评论 -
POJ 3067 Japan
题意: 东海岸有x个城市,西海岸有y个。x与y 之间有很多高速公路。问k条路有多少个交叉点。我就是求的逆序对,把east当作 pos 按照从大到小排序。然后插入。接下来的就跟求逆序对的一样了。线段树或者数状数组都能过。注意最后要用long long。(午夜一发,写完吃个面包睡觉。#include#include#include#include#include#in原创 2015-02-17 01:47:17 · 927 阅读 · 0 评论 -
SGU 180 Inversions
题意就是求 逆序数。依然线段树水过。→_→ 模版题。这下严格注意各种坑。1A。#include#include#include#include#include#include#include#include#include#include#include#include#include#define INF 0x7fffffff#define原创 2015-02-17 18:13:14 · 582 阅读 · 0 评论 -
POJ 2828 Buy Tickets
题意就是 给出一段插入,求出最后的序列。做到n*logn基本都能过。我用线段树做的。不过开始没想到怎么解决插入顺序问题,只知道存一个数组表示当前可以插入几个数。后来ACdream群给了解答。每次update的时候,如果left的插入数大于插入就继续,否者就走right,并且将插入改为插入-left的插入数。//PS 其实,觉得SBT应该能做的。#include原创 2015-01-26 12:14:09 · 643 阅读 · 0 评论 -
POJ 3468 A Simple Problem with Integers
题意很明确,区间修改+查询。我用线段树写的。核心思想就是延时操作,update[]表示当前节点需要增加多少。如果覆盖了这个区间就不向下传递了,修改update[]就行了。#include#include#include#include#include#include#include#include#include#include#include#inclu原创 2015-01-26 13:55:47 · 559 阅读 · 0 评论 -
POJ 2352 Stars
题意:计算星星的等级。星星的等级是由有多少 x 坐标小于它并且 y 坐标也小于它的星星的数量决定的。由于输入已经是按照 先y从小到大,再x从小到大的顺序排列好了的。所以 只需要按输入顺序插入,然后统计比当前x小的有多少个即可。只需要一个logn的修改和查询的数据结构就可以了。以前用数状数组写过,现在再补一个线段树的。线段树:#include#inclu原创 2015-02-16 17:41:27 · 608 阅读 · 0 评论 -
BestCoder Round #11 (Div. 2)
太菜,只能去Div2.(都做不完 ORZ。。。分别是 HDU: 5054 Alice and Bob5055 Bob and math problem5056 Boring count5057 Argestes and Sequence# 1001 碰面只能在坐标中间。所以判断一下就好了。#include#include原创 2014-09-28 21:25:15 · 1070 阅读 · 0 评论 -
HDU 1242 Rescue
bfs问题。Angel有被关在监狱,她有很多朋友要去救她。#表示墙,.表示路,x表示警卫,r表示她的朋友。由于可能有很多朋友,但是Angel只有一个,所以搜索起点设为Angel。只要找到一个朋友表示能走出去。走一格需要1,杀死警卫需要1,但是不能直接加2.因为会出现这种情况4 8axxxxxxr........................原创 2014-09-18 20:32:41 · 680 阅读 · 0 评论 -
九度OJ 1009 二叉搜索树
二叉树问题,左边比根小,右边比根大。AC代码#include#include#includeusing namespace std;char a[11],b[11];char ta[1025],tb[1025];int update(char *t,int o,int ans){ if(t[o]==-1)t[o]=ans; else {原创 2014-03-17 11:22:35 · 778 阅读 · 0 评论 -
九度OJ 1544 数字序列区间最小值
嗷嗷嗷!!!太难过了。本来以为是线段树的建树问题,原来用O(n*log n)超时。然后用O(n)的写法建树。还是超时。突然发现是不是cin 和 cout 的问题。于是改成 scanf 和 printf 。AC了。花费时间前后对比。然后改成 scanf printf 以后嗷嗷嗷!!!这尼玛以后老老实实用 scanf printf原创 2014-03-08 20:20:17 · 1228 阅读 · 0 评论 -
UVa 11732 strcmp() Anyone?
Trie 字典树(附数据生成程序)题意很好懂,就问一堆单词两两比较要多少次。不过很忧伤的是卡优化了。写了个数据生成,然后我跟别人程序比,用时大概是别人的一倍。别人635ms 过了。我就TLE…… 问题是2000ms啊。给跪了。附数据生成程序,各位可以生成数据看看,愿不要TLE。#include#include#include#include#in原创 2014-07-16 20:56:09 · 823 阅读 · 0 评论 -
HDU 1004 Let the Balloon Rise
字典树(Trie)题意是说找出最多的颜色。也就是找出出现次数最多的单词。插入,然后遍历一遍把最多的输出就可以。#include#include#include#include#include#include#include#include#include#include#include#define INF 0x7fffffff#define e原创 2014-07-16 19:39:14 · 589 阅读 · 0 评论 -
Vijos 1114 FBI树
额,就是构建一颗树而已。二分构建的。AC代码其实查询可以写在建树里面。#include#include#include#includeusing namespace std;char a[1025];char tree[2050];int check(int l,int r){ bool ok1=0,ok0=0; for(int i=l;i<=r原创 2014-03-27 19:23:12 · 726 阅读 · 0 评论 -
涨水问题 (简单几何+二分查找)
水从原点开始涨。每次50平方单位。从0开始。相等的时候就算下一次才涨上来。开始就暴力呗,想想咱不能这么简单,还是离线+二分。先给每次的R打个表,然后二分查找。#include#include#includeusing namespace std;double a[1000001];const double pi=3.141592654;void half(int l,i原创 2014-03-25 20:24:36 · 689 阅读 · 0 评论 -
POJ 3264 Balanced Lineup
标准线段树模版题。区间最大值减去区间最小值 就是奶牛的高度差。AC代码#include#include#include#includeusing namespace std;const int MaxF=10000000;const int MinF=-10000000;int n,ql,qr;int a[50001];int minv[200001];int ma原创 2014-03-12 21:32:51 · 465 阅读 · 0 评论 -
HDU 1166 敌兵布阵
以前用树状数组AC的。今天用线段树重写了一下。328ms。#include#include#include#includeusing namespace std;int ql,qr,n;int a[50001],sum[500001];int query(int l,int r,int o){ int m=(l+r)>>1,ans=0; if(ql=r)原创 2014-03-12 11:29:35 · 475 阅读 · 0 评论 -
HDU 1251 统计难题
字典树问题。其实也可以用map水过去。但是想到我还要巩固……唉,还是老老实实用字典树。不过 输入中间的 空行 卡了我一下,RE……果断判断*str AC了。#include#include#include#include#include#include#include#include#include#include#include#include#d原创 2014-07-07 15:06:44 · 692 阅读 · 0 评论 -
HDU 1075 What Are You Talking About
字典树看题库上说这是字典树,不过被我水过去了。题意是说用对应的字典,翻译出火星文。each line will contain at most 3000 characters.看到这句话我就安心了。Time Limit: 10000/5000 MS (Java/Others)果断用map 来水了。还真AC了。3296MS 。本来是想巩固一下字典树的,不过……。原创 2014-07-07 14:25:34 · 660 阅读 · 0 评论 -
POJ 2513 Colored Sticks
欧拉通路+并查集+字典树题意是说 木棍两头有颜色,怎么排让它连成一串。颜色相同可以接起来。最开始想用map水过去,一直TLE。怒点字典树天赋……花了一上午。字典树不多介绍,我的节点开小了,CE好几次,才想起“There is no more than 250000 sticks.”“A word is a sequence of lowercas原创 2014-07-07 13:34:08 · 722 阅读 · 0 评论 -
线段树
今天又联系了一下线段树。终于对线段树有了完整的了解。查询和修改操作都是O(log n)级别的。首次建树是O(n)。举例的是:求某个区间的最小值。input:na0,a1,a2……an-1;mquery x yupdate x yshow x yn为n个数m为m次操作query x y 查询 x-y之间的最小值;update x y原创 2014-03-11 16:21:04 · 547 阅读 · 0 评论 -
九度OJ 1543 无限完全二叉树的层次遍历
操操操。开始一直使用 long long 。发现就是最后一个数据过不了。→ →后来换了 unsigned long long 就AC了。非递归写法。这道题可以递归的。#include#include#include#include#includeusing namespace std;bool a[65];int main(){ int s,t; c原创 2014-03-07 19:29:07 · 1276 阅读 · 0 评论 -
POJ 2823 Sliding Window
继续复习线段树。找女朋友浪费时间啊。课程全部落下拉。这是标准的模版题。输出区间最小与区间最大。AC代码#include#include#include#includeusing namespace std;const int MaxF=10000000;const int MinF=-10000000;int n,ql,qr;int a[5000001];int mi原创 2014-03-13 09:04:24 · 550 阅读 · 0 评论 -
UVa 1401 Remember the Word
Trie+DP大白书上的字典树训练题。题意是说一个字符串可能有多少种小串组成。例如 abcd 4abcdababcd=a+b+cd;abcd=ab+cd;递推为:从最后一位往前,dp[i]=dp[i]+dp[i+ len[x]] x为输入时的顺序,附加到节点中。是 i~strlen(S)的前缀。S[1,2,3,…,i,…len]原创 2014-07-17 15:28:37 · 1263 阅读 · 0 评论 -
POJ 2503 Babelfish
字典树问题(map可水)题意是:给你一本字典,叫你翻译一段话。先把对应关系找到,然后输出就可以。字典树用于返回这是出现的第几个未知单词,然后对应。可以用map水过去。Trie:#include#include#include#include#include#include#include#include#include#include原创 2014-07-16 19:31:56 · 729 阅读 · 0 评论 -
C++重载运算符 < priority_queue 相关(个人笔记)
本来想用 priority_queue 去写个bfs。结果重载运算符忘了。ORZ。然后看书和问别人熟悉了一下,记录一下。struct lx{ int x,y,lv;};有一个这样的结构体。x,y,是坐标,lv 是它的权。重载struct lx{ int x,y,lv; friend bool operator<(lx a,lx b)原创 2014-09-19 11:28:28 · 2004 阅读 · 0 评论 -
HDU 1540 Tunnel Warfare
题意给出一个连续的数列。共n个,m个操作。D x 表示把x-th的村庄摧毁。Q x 表示加上x-th在内的连续村庄有多少个。R 表示把上次摧毁的村庄恢复。开始是想用线段树写的,可是各种没思路,不知道每次查询的时候怎么弄。然后看大神题解。了解设置 l,r,m 分别代表左边连续区间,右边连续区间,当前连续区间。区间进行合并操作。#include#include#原创 2015-03-26 10:14:48 · 508 阅读 · 0 评论