数据结构
FeBr2
(๑•̀ㅂ•́)و✧
展开
-
线段树(区间最大值查询和点修改)——I Hate It ( HDU 1754 )
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1754分析&&题解:直接套模板即可,需要注意的是得用C输入。(T^T,C++输入直接T超3000,C输入瞬间800+,非人哉)1.线段树标准预处理:#define lc (d<<1)#define rc (d<<1|1)#define mid ( l+r >>1)2.建树:const int原创 2016-07-23 14:23:08 · 404 阅读 · 0 评论 -
可持久化Treap——SPOJ ADALIST
题目链接:http://www.spoj.com/problems/ADALIST/题意:有3种操作,要求能够在第K个位置加入元素,删除第K个位置的元素,输出第K个位置的元素分析:这道题可以使用vector或者dequeue暴力跑过,还可以用更省时的Treap来做。复习一下可持久化Treap:插入:在第K位置split,合并三棵Treap删除:在第K位置split,再split包含第K个元素的原创 2017-04-12 22:54:14 · 581 阅读 · 0 评论 -
并查集——检查图中是否有环
题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1645题意:每次输入一对数字,(两个数字不相等,不输入重复对),当有若干个数字对中含有的数字种类和总的数字的对数相等时候,爆炸,这时拒绝输入这一对数字,当输入单个-1时输出拒绝的次数原创 2017-01-13 21:14:48 · 2121 阅读 · 0 评论 -
双端队列+与非运算——Basic Data Structure ( HDU 5929 )
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5929分析: 实现一个数据结构,能够满足如下四种操作: PUSH:把一个元素( 0 or 1 )放入栈的顶部。 POP:删除栈顶的一个元素( 只会在栈不为空的时候进行 ) REVERSE:翻转整个栈 QUERY:做操作 atopNANDatop−1NAND....NANDa1a_{top}原创 2016-10-07 11:07:05 · 720 阅读 · 0 评论 -
并查集——Destroying Array(Intel Code Challenge Elimination Round C)
题目链接: http://codeforces.com/contest/722/problem/C分析: 给出一个数组,n个元素,给出一个删除顺序,包含n个数字,不重复,且范围在[1, n],求每一步删除后,输出分开的每一段数组里和最大的。题解: 一开始想用线段树,但无奈数据结构学得不好,所以又想了一会,感觉把删除操作去掉有点并查集的味道,然后开始并查集胡搞。教训: 本来可以比赛时间AC原创 2016-10-02 01:11:37 · 402 阅读 · 0 评论 -
数据结构 ( 优先队列&&栈 )——HDU 5818 ( 2016 Multi-University Training Contest 7 1010 )
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5818分析:对栈做三种操作: push A x 把x元素压入A中 pop B 删除B中最上面的元素并输出该元素 merge B A合并A到B中,合并后B中的元素顺序和之前压入的顺序一样(就是从头开始把之前的压入操作都只对B执行一遍)题解: 用一个数据结构存储值和序号,使用三个优先队列,按原创 2016-08-09 20:18:39 · 432 阅读 · 0 评论 -
树状数组+离散化——HDU 5877 (2016 ACM/ICPC Asia Regional Dalian Online 1010)
题目链接: http://acm.split.hdu.edu.cn/showproblem.php?pid=5877参考博客: http://blog.csdn.net/mymilkbottles/article/details/52497953分析: 给出N个点,常数值K,给出数组A表示每个节点的值。 再给出N-1条有向边u->v。求有多少组weak pair < u, v >,即满足:原创 2016-09-11 11:41:10 · 497 阅读 · 0 评论 -
树状数组 ( 求逆序数 )——Bubble Sort ( HDU 5775 ) ( 2016 Multi-University Training Contest 4 1012 )
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5775分析: 给出N个数,将这几个数进行题中所述的“冒泡排序”,求每个数在排序过程中(包括始末状态)所达到的坐标的最大差值。题解: ①我们可以先求出每个数在排序过程中所能达到最靠后的位置 loc ,然后 loc - min ( 起始点,终止点 ) 就是要求的最大差值。②而每个点能移动到的最靠后原创 2016-07-28 20:05:45 · 459 阅读 · 0 评论 -
树状数组+离散化——求大范围,大数数组的逆序数
模板转自网络(侵删)#include <iostream>#include <string.h>#include <algorithm>#include <stdio.h>using namespace std;const int N = 500005;struct Node{ int v,order;//v为数字原来的值,order为数字原来的序号};int n;int c原创 2016-07-28 20:12:19 · 425 阅读 · 0 评论 -
树状数组 ( 基础篇 )——敌兵布阵 ( HDU 1166 )
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1166分析: 输入一堆数,范围小于50000,要求对其进行修改具体元素,区间求和两种操作。一看就是树状数组。题解:先来一发树状数组的基本模板:int TreeArray[40005],N;int lowbit(int i)//lowB操作!!!{ return i & (-i);原创 2016-07-22 21:00:21 · 455 阅读 · 0 评论 -
线段树(区间更新与区间查询)——Just a Hook ( HDU 1698 )
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1698分析&题解:不多说,这类水题都放模板1.线段树标准预处理:#define lc (d<<1)#define rc (d<<1|1)#define mid ( l+r >>1)//l,r表示整个区间范围2.建树:#define Max 100005int a[Max];struct Tr原创 2016-07-23 14:57:27 · 380 阅读 · 0 评论 -
树状数组 or 归并树 —— HDU 4417
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4417题意:给出一个数组,每次查询区间 [li,ri][l_i,r_i] 内大于等于 hih_i 的数的个数分析:解法1:我们可以离线所有查询,然后把查询按照 hih_i从小到大排序,并且把原来的数组也从小到大排序,从第一个元素开始,判断是否满足当前查询的条件,满足在树状数组中给对应元素的原来位置赋原创 2017-04-29 12:45:24 · 423 阅读 · 0 评论