摘要: 1 #include 2 3 int n,ans; 4 5 int main(){ 6 scanf("%d",&n); 7 for (int i=1;i<=n;i++) ans+=n/i; 8 printf("%d\n",ans); 9 return ... 阅读全文
posted @ 2015-12-28 10:56 443singer 阅读(93) 评论(0) 推荐(0) 编辑
摘要: 巧妙的性质:一个点最多只会与他横纵坐标最近的那4个点连边。所以我们sort sort连边建图。跑dijkstra 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 using n... 阅读全文
posted @ 2015-12-28 10:53 443singer 阅读(178) 评论(0) 推荐(0) 编辑
摘要: 值域线段树套上一颗区间线段树。查询的时候二分找。最后树套树的空间一定要好好算算。。 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 const int N = 50000; 7 int n... 阅读全文
posted @ 2015-12-28 10:48 443singer 阅读(112) 评论(0) 推荐(0) 编辑
摘要: 树套树呀树套树。题意为可以交换两个位置的数,询问每次交换后的逆序对数。直接区间线段树上面套一个值域线段树,然后稍微讨论一下。首先建好树查询一次得到一个ans。(话说我们得到了一个nlog^2的求逆序对的算法)设两个位置为i,j,如果i==j或者是a[i] == b[j]的话就不管。i>j则交换。如果... 阅读全文
posted @ 2015-12-28 10:46 443singer 阅读(106) 评论(0) 推荐(0) 编辑
摘要: fail树上建可持久化树。根据原题中给定的输入跑就可以跑出一颗trie树,然后对这个trie数建fail树。我最开始的思路错了:A串在B串中出现的次数就是看B中有多少节点可以直接或者说间接的指向A的子树。举个反例:A = aaa,设A的子树是一个点为b,B = aaab,那么B将会有两个指针指向A的... 阅读全文
posted @ 2015-12-28 10:32 443singer 阅读(127) 评论(0) 推荐(0) 编辑
摘要: 我写的是LCT,开始的时候修改操作挂了,正确的修改姿势有两种,一种是记录每个点实际的fa是谁,然后修改u的时候access(fa[u])然后splay(u),然后把u的pre直接指向该指向的点,fa[u]->ch[1]==NULL就可以了;另外一种是access(u),然后断掉它的左儿子,然后直... 阅读全文
posted @ 2015-12-28 10:23 443singer 阅读(110) 评论(0) 推荐(0) 编辑
摘要: 给定一棵有n个节点的无根树和m个操作,操作有2类:1、将节点a到节点b路径上所有点都染成颜色c;2、询问节点a到节点b路径上的颜色段数量(连续相同颜色被认为是同一段),如“112221”由3段组成:“11”、“222”和“1”。请你写一个程序依次完成这m个操作。题解:链剖裸题+线段树合并,注意合并的... 阅读全文
posted @ 2015-12-28 10:18 443singer 阅读(99) 评论(0) 推荐(0) 编辑
摘要: 模型转换 阅读全文
posted @ 2015-12-28 10:14 443singer 阅读(136) 评论(0) 推荐(0) 编辑