数据结构
exmy
Less is more, and more is less.
展开
-
PAT--1119. Pre- and Post-order Traversals
1119. Pre- and Post-order Traversals题解reference#include <iostream>#include <cstdio>#include <algorithm>#include <vector>using namespace std;const int maxn = 35;int pre[maxn], post[maxn];int n;ve原创 2016-10-27 23:36:09 · 345 阅读 · 0 评论 -
PAT--1115. Counting Nodes in a BST
pat A.1115题解每个结点附加一个域表示该结点所在的层次,建树的时候同时计算。 然后遍历之。#include <iostream>#include <string>#include <algorithm>using namespace std;typedef struct node* BinTree;struct node{ int k; int l; Bin原创 2016-03-16 19:51:24 · 493 阅读 · 0 评论 -
nyoj--129 树的判定(并查集)
nyoj 129题意若干条有向边(u,v)(u, v),判定能否构成一棵有向树。题解构成有向树的条件是: 1. 空树是有向树; 2. 只有一个根节点,除根节点外的每个结点只有一个父节点,也就是只有一个结点入度为0,其他结点入度为1; 3. 不能形成环。可以用并查集检查集合个数,显然一棵树应只有一个集合。 一开始没注意到空树,一直WA,WA,WA,伤得不轻。#include <iostream原创 2016-03-08 17:54:49 · 626 阅读 · 0 评论 -
nyoj--119 士兵杀敌(三)(RMQ)
nyoj 119题解区间最值查询,RMQ模型。#include <iostream>#include <cstdio>#include <cmath>#include <algorithm>using namespace std;const int maxn = 100000 + 10;int maxnum[maxn][17], minnum[maxn][17]; //2^17 = 1原创 2016-03-07 21:33:44 · 450 阅读 · 0 评论 -
nyoj--116 士兵杀敌(二)(树状数组)
nyoj 116题解练练树状数组。#include <iostream>#include <cstdio>#include <string>#include <algorithm>using namespace std;const int maxn = 1000000 + 10;int a[maxn], c[maxn];int n, m;int lowbit(int x) { r原创 2016-03-07 12:26:45 · 383 阅读 · 0 评论 -
PAT--1013 Battle Over Cities(并查集)
PAT 1013题意一个无向图,去除一点以及这点邻接的边,输出使余图连通还需的边数。题解并查集高效判断连通性。#include <iostream>#include <cstdio>#include <algorithm>using namespace std;const int maxn = 1000 + 5;const int maxe = (maxn + 1) * maxn / 2;原创 2016-02-21 23:26:46 · 436 阅读 · 0 评论 -
UVa--12657 Boxes in a line(双向链表)
UVA--12657题解:lrj大法。采用双向链表,编号为 i 的的盒子左右两边的盒子编号分别为 left[i] 和 right[i] 。技巧:操作4反转需要修改所有元素的指针,为避免时间消耗,增加一个标记 inv, 表示有无反转,这样就并不需要真的去执行操作4.inv = 1表示奇数次反转,inv = 0表示偶数次反转。当inv = 1的时候,操作1和2需要反过来,操作3原创 2016-02-13 22:31:28 · 449 阅读 · 0 评论 -
UVa--514 Rails (stack)
UVa--514题意:判断一个出栈序列是否合法。题解:典型的栈应用,用栈模拟。注意蛋疼的格式。#include #include #include #include #include using namespace std;int n;vector a;bool judge(){ stack S; int j = 0; for(int原创 2016-02-13 15:18:15 · 397 阅读 · 0 评论 -
蓝桥杯--历届试题 小朋友排队(树状数组求逆序数)
历届试题 小朋友排队 时间限制:1.0s 内存限制:256.0MB问题描述 n 个小朋友站成一排。现在要把他们按身高从低到高的顺序排列,但是每次只能交换位置相邻的两个小朋友。 每个小朋友都有一个不高兴的程度。开始的时候,所有小朋友的不高兴程度都是0。 如果某个小朋友第一次被要求交换,则他的不高兴程度增加1,如果第二次要求他交换,则他的不高兴程度增加2(即原创 2016-01-28 17:53:05 · 1823 阅读 · 0 评论 -
并查集
在计算机科学中,并查集是一种树型的数据结构,其保持着用于处理一些不相交集合(Disjoint Sets)的合并及查询问题。有一个联合-查找算法(union-find algorithm)定义了两个操作用于此数据结构:Find:确定元素属于哪一个子集。它可以被用来确定两个元素是否属于同一子集。Union:将两个子集合并成同一个集合(维基百科)带路径压缩的 Find:所原创 2016-01-28 15:18:22 · 544 阅读 · 0 评论 -
PAT--1098. Insertion or Heap Sort(排序)
link题解选择排序和堆排序.#include <iostream>#include <cstdio>#include <algorithm>#include <vector>using namespace std;const int maxn = 100 + 10;vector<int> a, b;int n;int flag;bool insertSort(vector<int>原创 2016-12-08 17:37:12 · 390 阅读 · 0 评论 -
PAT--1123. Is It a Complete AVL Tree (30)
link题解AVL树的插入,然后判断一下是否为完全二叉树。 题目简单,然而考试的时候没做出来= = 好久没写过平衡树,记不得了,只写了个普通的BST得了可怜的6分。。 基础不牢啊。。务实基础!!!#include <iostream>#include <cstdio>#include <algorithm>#include <vector>#include <queue>#inclu原创 2016-12-10 21:26:21 · 725 阅读 · 2 评论 -
poj--3264 Balanced Lineup(RMQ)
poj 3264题解RMQ练手。#include <iostream>#include <cstdio>#include <cmath>#include <algorithm>using namespace std;const int maxn = 50000 + 10;int ax[maxn][20], in[maxn][20];int n, q;void RMQ(){原创 2016-03-19 22:01:03 · 329 阅读 · 0 评论 -
poj--2823 Sliding Window(单调队列)
poj 2823题解#include <iostream>#include <cstdio>#include <set>#include <queue>#include <vector>#include <algorithm>using namespace std;const int maxn = 1000000 + 10;int a[maxn];int n, k;// TL原创 2016-04-27 23:53:11 · 395 阅读 · 0 评论 -
hdoj--3530 Subsequence(单调队列)
hdoj 3530题意在一个整数序列中,找到一个最长的子序列,满足该子序列的最大元素与最小元素的差值不小于 m 也不大于 k。题解用单调队列维护前 i 个元素的最大和最小值。 参考#include <iostream>#include <cstdio>#include <algorithm>#include <vector>#include <queue>using namespace原创 2016-04-28 16:03:14 · 420 阅读 · 0 评论 -
PAT--1118. Birds in Forest(并查集)
1118. Birds in Forest题解裸的并查集#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int maxn = 10000 + 5;const int inf = 0x3f3f3f3f;int p[maxn], tmp[m原创 2016-10-27 23:28:28 · 801 阅读 · 0 评论 -
hdoj--1394 Minimum Inversion Number(逆序)
Minimum Inversion Number题解#include <iostream>#include <cstdio>#include <cstring>#include <list>#include <algorithm>using namespace std;#define FIN freopen("data.in", "r", stdin);#define mem(a, v)原创 2016-09-16 11:56:11 · 326 阅读 · 0 评论 -
hdoj--2795 Billboard(线段树)
2795 Billboard题解叶子结点[x, x]表示第x行还可以放置的长度;非叶子结点表示的区间[a, b]维护的是该区间中剩下长度最大的一行的长度。#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>using namespace std;#defin原创 2016-09-16 10:08:37 · 342 阅读 · 0 评论 -
hdoj--1754 I Hate It(线段树)
1754 I Hate It题解线段树,节点维护的是该节点管辖区间的最大值。#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>using namespace std;#define FIN freopen("data.in", "r", std原创 2016-09-15 23:50:00 · 266 阅读 · 0 评论 -
hdoj--1166 敌兵布阵(树状数组or线段树)
1166 敌兵布阵题解线段树:#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#define Avg(x, y) ((x & y) + ((x ^ y) >> 1))const int maxn = 50000 + 5;int tree[3 * max原创 2016-09-15 22:45:38 · 313 阅读 · 0 评论 -
poj--3067 Japan(树状数组+逆序数)
3067 Japan题解(POJ为什么不与时俱进升级下编译器呢..)#include <iostream>#include <cstdio>#include <cstring>#include <vector>#include <algorithm>using namespace std;#define fst first#define sec secondconst int maxn原创 2016-09-15 17:26:28 · 499 阅读 · 0 评论 -
hdoj--3584 Cube(三维树状数组)
3584 Cube题解三维树状数组的区间更新、单点查询。#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>using namespace std;const int maxn = 101;int c[maxn][maxn][maxn];int n, m;int lowbit(int x) {原创 2016-09-15 15:20:22 · 381 阅读 · 0 评论 -
hdoj--2642 Stars(二维树状数组)
2642 Stars题解二维树状数组的单点更新、区间求和。#include <iostream>#include <cstdio>#include <algorithm>#include <vector>using namespace std;const int maxn = 1000 + 5;int c[maxn][maxn];bool mark[maxn][maxn];int lo原创 2016-09-15 15:16:44 · 294 阅读 · 0 评论 -
codeforces--707E. Garlands(二维树状数组)
cf 707E题解参考题解#include <bits/stdc++.h>using namespace std;const double eps = 1E-8;const int dx[4] = {1, 0, 0, -1};const int dy[4] = {0, -1, 1, 0};const int inf = 0x3f3f3f3f;const int N = 1E5 + 7;#原创 2016-08-26 16:41:48 · 933 阅读 · 0 评论 -
poj--2559 Largest Rectangle in a Histogram(单调栈)
poj 2559题解对于每个矩形,左右扫描一下找到第一个比其高度更小的矩形。维护一个单调递增栈,即从栈底到栈顶严格递增,这样,栈顶就是第一个更小的值。 维护两个数组,L[i] 和 R[i] 分别表示第 i 个矩形的这两个下标。#include <iostream>#include <algorithm>#include <cstdio>using namespace std;typedef原创 2016-06-02 21:52:51 · 398 阅读 · 0 评论 -
poj--3468 A Simple Problem with Integers(线段树)
poj 3468题意有 NN 个数,A1,A2,...,AnA_1, A_2, ..., A_n,要进行两类操作: - 给定一个区间,区间内的每个数都加上一个值,即成段更新; - 区间求和题解线段树。 树中区间对应数字的下标范围,叶子结点从左到右依次代表 A1,A2,...,AnA_1, A_2, ..., A_n 的初始值。 每个节点设两个值: * 子区间的数和,初始时为子区间内初始值原创 2016-05-24 12:33:34 · 349 阅读 · 0 评论 -
hihoCoder--153周 股票价格
描述 小Hi最近在分析一支股票的价格走势,他需要一个程序来辅助分析。这个程序会接收3种消息(指令):价格信息,格式是P timestamp price:表示这支股票在 timestamp 时刻价格是 price。删除价格指令,格式是R timestamp:随着时间推移,小Hi会积累越来越多的价格数据。一些老旧的数据会变得不重要。这个指定会删除 timestamp 以前(包括 timestamp 时原创 2017-06-05 09:10:16 · 432 阅读 · 0 评论