
acm_数据结构
文章平均质量分 63
Lint_try
弱~弱~弱,发奋以屠强
展开
-
Codeforces 558 D. Guess Your Way Out! II
http://codeforces.com/problemset/problem/558/D我先把q个区间都下移到叶子层,映射一下,若[l,r] 为 1,则[l,r] 的 g[]值 + 1,否则其补集所在的区间 +1,对于区间所有数 +1,可以先 g[l] + 1, g[r+1] - 1,最后在求一下和。然后看看g[] = q的点有几个。原创 2015-08-02 11:14:07 · 482 阅读 · 0 评论 -
HDU 5381 The sum of gcd
对于每个i,求出若干区间[l1,r1],[l2,r2],[l3,r3]...满足gcd(l1~i)~gcd(r1~i)一样,gcd(l2~i)~gcd(r2,i)一样...则以i为右区间的所有gcd和为sum[i] = (r1 - l1 + 1) * g1 + (r2 - l2 + 1) * g2 + ...同理求出i右边的一段段同gcd区间[l11,r11],[l22,r22],[l33原创 2015-08-13 20:01:58 · 878 阅读 · 0 评论 -
Codeforces 570 D. Tree Requests
http://codeforces.com/contest/570/problem/D仔细想来,还真没做过一道dfs序的题....先将查询按深度排序,对于要操作的深度,将树上的这一层都放到树状数组上。查询的时候,就查询这颗子树内各个字母出现的个数。#include using namespace std;typedef long long ll;#def原创 2015-08-14 13:37:08 · 956 阅读 · 0 评论 -
UVA 11987 Almost Union-Find
就是比普通的并查集多了个删除操作,显然叶子节点容易删,问题在于可能删根节点。既然叶子节点容易,我们就把所有的点都变成叶子。我是多开了n个虚拟节点。(因为我的集合合并是直接连两个根,所以那些有效节点的父亲肯定一直是虚拟节点,所以删除的时候只要考虑一个点就行....其实我是后来才发现,这算是水过吗 QAQ)原创 2015-08-16 19:00:38 · 122 阅读 · 0 评论 -
Codeforces 540 E. Infinite Inversions
离散化 + 树状数组。先处理出所有会变动的位置,然后求出这些位置上最终的数值。接着分两步,先求出这些元素之间的逆序数,再求每个元素和其余不变动元素间的逆序数原创 2015-08-07 13:46:07 · 636 阅读 · 0 评论 -
2016"百度之星“-初赛(Astar Round2B)-A.区间的价值
每次取出集合中最大的数,放到它对应的位置,如1,6,2,4,4,取出6,放到1位置(从0开始)。当你取出一个数a时,两边会有一些之前放的数,,其中a是最小的,假设在中最大,中最大。那么这一段连续的数可以更新长度为]的答案,而且是要包含a的一段。一段区间的有效部分是最小值到最大值的一段,我们可以先考虑有效部分,然后用它向上更新。因为a是最小值,最大值要么在b,要么在c,有效区间不会横跨b,c原创 2016-05-25 12:52:46 · 470 阅读 · 0 评论