datestruct
文章平均质量分 77
Glory_g
明日之我胸中有沟壑,立马振山河
展开
-
HDU 5634 Rikka with Phi
题意:有3种区间操作, 1是把区间内的所有数变成它的欧拉函数值, 2是把区间所有数都变成一个数x,3是查询区间和。题解 : 一眼看过去就是线段树问题,对于这一类问题,无论是给一个区间取对数,还是给一个区间开根号,或者是取欧拉函数值,由于这一类函数收敛的非常快,可以严格logn内收敛到1然后到1我们就可以不再进行更新,这样我们就可以暴力更新每个点的欧拉函数值,用线段树维护区间和和区间最大值,维护原创 2017-08-20 23:45:50 · 235 阅读 · 0 评论 -
HDU 5875 Function 2016亚洲区域赛大连网络赛
题意:给你n个数和询问,让你回答对一段区间去膜的结果。题解:这个题的关键,在于我们要注意一个数取模的一个性质就是说 一个数对一个比这个数大的数取模这个数不变,如果对一个比这个数小的数取模,这个数最少变成原来的 1 / 2.有了这个性质我们不难发现一个数取模的收敛速度是非常快的。在 logn时间内就可以收敛到很小,这样我们就可以找一个区间内比这个数小的数去取模大的数我们就可以不管。不断寻找比取模原创 2017-08-28 21:32:16 · 249 阅读 · 0 评论 -
HDU 2196 Computer(求树上每个节点到其它点的最远距离 树dp)
题意:求树上每个节点到其他节点的最大距离。题解 : 用树dp 首先我们发现每个节点要么先向上走要么先向下走,并且只要向下走就会一直向下走直到走到叶子节点,如果向上走那么下一步即可以向上走也可以向下走。我们用f[i] 表示第一步向下走时 i 节点走到的最远距离 g[i] 表示第一步向上走走到的最远距离,不难得到一个状态转移方程 : f[i] = max (f[j] + cost[i][j]) 其原创 2017-08-28 10:50:40 · 1007 阅读 · 0 评论 -
poj 1655 Balancing Act 求树的重心(详解树重心求法)
先来说一下树的重心的定义 : 一棵无根树上选择一个节点当作根节点,使得以这个节点为根的最大子树的节点数最少。这样的话就可以使得这棵树趋于平衡,在一些点分治或者其他算法中可以避免最坏的 n^2 的情况使得复杂度稳定为nlogn。关于树的重心的求法:求法为一种从叶子到根的树形dp。具体做法为先随便取一个节点提到根上做一遍dfs,记录下每个节点包含该节点的子树大小(大小即为该节点所有儿子的大小加上1原创 2017-08-28 09:52:30 · 1461 阅读 · 0 评论 -
分治与二分三分用法介绍
今天主要是写了一些分治的题目主要是一般的分治、二分、三分、大概了解了在树上点分治的思想(代码就gg了)…… 做了有5道这方面的题目 今天所理解的分治就是不断想办法将问题规模变小而问题的性质不变 就可以通过这种方法递归question 1 : poj3714 Raid;题意 : 给你2n个点前n个点一组 后n个点一组n 是 1e5问你前一组和后一组中任意两个点的最小距原创 2017-08-27 23:34:07 · 844 阅读 · 0 评论 -
单调队列与单调栈用法详解
基本数据结构的应用一 栈和队列单调栈 单调队列 和 优先队列的应用1.单调栈单调栈是指一个栈内部的元素是具有严格单调性的一种数据结构,分为单调递增栈和单调递减栈。单调栈有两个性质1.满足从栈顶到栈底的元素具有严格的单调性2.满足栈的后进先出特性越靠近栈底的元素越早进栈元素进栈过程对于一个单调递增栈来说 若当前进栈的元素为 a 如果a = 当前栈顶元素则不断将栈顶元原创 2017-08-27 23:32:09 · 15248 阅读 · 1 评论 -
HDU-3038 How Many Answers Are Wrong 并查集
题意 : 给你m个区间的区间和,让你判断有多少个答案是错误的。#include #include #include #include using namespace std;const int maxn = 2e5 + 10;int sum[maxn] = {0};int p[maxn] = {0};int find (int x) { if (x == p[x])原创 2017-08-23 16:56:43 · 251 阅读 · 0 评论 -
Codeforces Round #424 E. Cards Sorting
题意 : 给你N张牌,操作为拿起牌顶的牌,若当前牌的数值是最小的,就扔掉它,否则将牌放到牌堆底,问扔完所有牌需要多少次操作。这个题肯定是从小到大删除,可以用一个 vector 保存每一个数的下标然后给每一个数的下标从小到大排个序(这样可以用O(1)时间内找到要删掉下一个的位置 ),用线段树或者树状数组维护每个区间内有多少个数没有背删去 (单点修改,区间查询)。cod原创 2017-08-20 11:52:42 · 256 阅读 · 0 评论 -
Codeforces 834D The Bakery【Dp+线段树】
题意 : 给你n个数让你划分成k个部分,每个部分对答案的贡献为这个部分不同数字的个数。问你答案最大为多少?题解 : 拿过这道题目我们不难想到动态规划做法,用dp (i,j) 表示前i个分成j部分最大答案是多少。则dp的状态转移方程为dp (i,j) = max (dp(x,j - 1) + diff (x + 1,i)); 但是这个状态转移方程的时间复杂度是 n^3 * k的显然是不可原创 2017-08-23 11:54:29 · 317 阅读 · 0 评论 -
hdu 4348 To the moon (主席树)
题意 给你一些操作让你实现题解:主要是主席树至于对于区间更新有两种方式一种是打lazy 下传标记,另外一种是直接记录每走一层就把这层的lazy标记加上,这样就可以实现节约空间。#include#include#include#includeusing namespace std;const int N = (int)3e6+10;const int M = (int)1e5+1原创 2017-08-26 16:53:17 · 227 阅读 · 0 评论 -
HDOJ4417 Super Mario [主席树 + 二分]
题意 : 先给你n个数,再给你m次询问,每次询问问你[l,r]区间内有多少个小于等于 h 的数。题解 :我们看到求[l,r] 之前的小于等于 h 的数,主席树是用来干什么的呢?是用来解决区间第k大问题,发现这个问题非常想主席树的作用,然后我们就可以二分 第 k 大的 k 然后比较的得到的数与 h 的大小关系,直到找到一个最大的数,且这个数小于等于h ,这个时候我们记录下这个数的排名就是这个题的原创 2017-08-26 10:12:11 · 227 阅读 · 0 评论 -
poj 2104 -- K-th Number (主席树模版题)
询问区间第k大问题,是主席树主要解决的一类问题。下面说一下我对主席树这种数据结构的理解 : 主席树就是可持久化线段树或者叫函数式线段树,这种数据结构支持访问历史版本。对于这个题而言我们最开始的想法是先对数据进行离散化然后建立n棵线段树,每一棵线段树 表示区间 1 到 i 之间 有哪些数(如果这个区间内有总排名第 i 打的数 那么 [i,i] 这个区间就设置成 1 否则设置成 0,这样的话查询区原创 2017-08-25 20:57:00 · 193 阅读 · 0 评论 -
HDU 5877 Weak Pair(离散化+dfs+树状数组) 大连区域网络赛
题意 :给你一棵树,定义:若一个节点为一个节点的父亲节点,并且这两个节点的乘积小于等于k,那么称之为一条路径,问你一共有多少条路径。题解 : 首先对一第一个条件我们不难想到dfs 因为在做dfs 的时候访问到的节点的祖先节点肯定都被访问过了 (这是dfs的特性)这样的话我们在访问每个节点的时候就可以将这个节点的 值扔进一棵线段树或者树状数组更新该节点,使得该节点的值 +1 ,访问完这个节点的所原创 2017-08-28 22:58:23 · 288 阅读 · 0 评论