![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
树状数组
DZYO
Never stop
展开
-
bzoj4822[CQOI2017]:老C的任务(树状数组/k-dtree)
题解:树状数组或k-d树。树状数组:将数据离散化后将询问拆成左x和右x。依次加入点查询即可。k-d树:裸题,但会被卡20分。#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<string>#include<algorithm>#include<cmath>using namespac原创 2017-04-29 17:03:37 · 957 阅读 · 0 评论 -
BZOJ4516: [Sdoi2016]生成魔咒(后缀数组)
传送门 给一个串,分别求[1,r] , r=1,2,3,4….,n的不同子串个数。题解:后缀数组先把串反转,其实就是求每一个后缀的不同子串个数。依次从后往前加入后缀,一个后缀能产生的不同子串个数为这个后缀的长度减去与它的排名前一名的后缀的长度,维护前缀即可。每次插入一个后缀t,设它排名前一个后缀为p,后一个后缀为s。因为之前插入s或t后缀时必然会减去最长公共前缀,因此,答案先加上lcp(p,s原创 2017-08-26 19:24:53 · 319 阅读 · 0 评论 -
Codeforces Round #439 (Div. 2) E:The Untended Antiquity(Hash+二维树状数组)
传送门题意: 给一个n∗mn*m的网格,每次可以选定一个矩形,在他周围放置一个障碍(围栏),或者清楚一个障碍,障碍之间不相交,支持任意时刻询问两点是否被隔开。题解: 首先矩形不相交可以知道两点如果不能互相到达一定是在不同的障碍里,考虑对每个障碍赋一个Hash值,用二维树状数组差分维护,查询直接查前缀和就好了。#include<bits/stdc++.h>using namespace std;原创 2017-10-07 09:20:11 · 460 阅读 · 0 评论 -
BJ模拟:链上求和(树状数组)
题意: 给一棵树,求: ∑x=1n∑y=x+1n∑k=1dis(x,y)+1((x,y)路径上前k大点权和)∑x=1n∑y=x+1n∑k=1dis(x,y)+1((x,y)路径上前k大点权和)\sum_{x=1}^n \sum_{y=x+1}^{n} \sum_{k=1}^{dis(x,y)+1} ((x,y)路径上前k大点权和) 其中dis(x,y)dis(x,y)dis(x,y)表示xx...原创 2018-04-09 21:58:47 · 256 阅读 · 0 评论 -
NOI模拟:必去之
题解:fi=maxj{min{ai−aj,bi−bj}+fj+1}(j&amp;lt;i,pj&amp;lt;i)f_i = \max_j \{\min \{a_i-a_j,b_i-b_j\}+f_j+1\} (j \lt i, p_j \lt i)fi=jmax{min{ai−aj,bi−bj}+fj+1}(j&lt;i,pj&lt;i)其中aia_iai为没有填的数...原创 2018-09-21 15:55:19 · 495 阅读 · 0 评论 -
Codechef :Rectangle Query/QRECT (容斥+树套树)
传送门题解:CDQ分治什么不存在的。直接找不相交的,然后分八种情况维护一下即可。#include &lt;bits/stdc++.h&gt;using namespace std;const int RLEN=1&lt;&lt;18|1;inline char nc() { static char ibuf[RLEN],*ib,*ob; (ib==ob) &amp;&amp原创 2018-10-10 19:58:40 · 235 阅读 · 0 评论