![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
树状数组
文章平均质量分 65
a1214034447
这个作者很懒,什么都没留下…
展开
-
hdu 3015 Disharmony Trees(树状数组+离散)
这里是题目链接:题目链接因为高度只要求取两点中最小的那个所以我们先按高度从小到大排序,那么每次枚举的hi肯定就是最小的啦,然后用树状数组维护区间和和区间数就可以了。题解:#include#include#include#include#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1using namespace s原创 2017-05-05 12:17:46 · 369 阅读 · 0 评论 -
Comet OJ - Contest #4 A-E
题目链接:https://cometoj.com/contest/39/problemsA.骚动时节的少女们水题略。B.奇偶性1.当k是奇数时,所有数都是奇数,所以直接输出r-l+1.2.当k是偶数时,显然是偶数的位置是p = x*(k+1) - 1,x = 1,2,3,4....,所以对于这种情况来说只要多做个除法就好了#include <bits/std...原创 2019-05-28 14:30:08 · 297 阅读 · 0 评论 -
Comet OJ - Contest #3 A-D
题目链接:https://www.cometoj.com/contest/38/problemsA.比赛暴力枚举+排序#include <bits/stdc++.h>using namespace std;typedef long long ll;typedef unsigned long long ull;const int mx = 500 + 10;...原创 2019-05-11 17:30:12 · 314 阅读 · 0 评论 -
Gym - 101174F[(DSU)+树状数组]
题目链接:https://vjudge.net/problem/Gym-101174F解题思路:其实这题不同启发式合并也可以做,对rank排个序,然后在做个dfs序,把rank值小的先插入树状数组中更新,然后对每个节点查询它的dfs序的区间和就好了。对于DSU来说就更加无脑了,本来就是"暴力",所以我们直接DSU再加一个树状数组维护前缀和。最坏时间复杂度就是O(n*log(n...原创 2019-05-05 16:20:46 · 182 阅读 · 0 评论 -
Codeforces Round #548 (Div. 2) 题解
题目链接http://codeforces.com/contest/1139A. Even Substrings判断个位是否是奇数即可。#include <iostream>#include <set>#include <array>#include <vector>using namespace std;typedef...原创 2019-03-31 18:03:58 · 336 阅读 · 0 评论 -
hdu 4742 - CDQ分治 + 树状数组
题目链接:点击这里 解题思路:将一个轴(z轴)从小到大排序(排序过程注意x,y也要讨论).之后的问题就变成了在排序数组中找到最长上升序列问题了.然后用CDQ分治 + 树状数组,x轴排序,y轴用树状数组维护,就ok了. #include<bits/stdc++.h>#define fi first#define se secondusing namespace...原创 2018-10-02 13:29:06 · 232 阅读 · 0 评论 -
hdu 5324 - CDQ分治 + 树状数组
题目链接:点击这里 解题思路:将L,R看做平面直角坐标系坐标(x,y),将R变成-R,那么就变成x轴,y轴持续变小的最长连续序列.用CDQ分治 + 树状数组,x轴排序,y轴用树状数组维护.先处理有半部分在根据有半部分得到左半部分. #include<bits/stdc++.h>#define fi first#define se secondusing na...原创 2018-10-02 13:19:35 · 180 阅读 · 0 评论 -
hdu 6447 - 树状数组+离散化
题目链接:点击这里 解题思路:用y从小到到排序,y相等的按x从大到小排序,那么我用x做树状数组维护前缀最大值,因为经过这样排序之后,i前面所有的点y都是递增的,所以可以直接取前缀最大就行了。 #include<bits/stdc++.h>using namespace std;#define fi first#define se second#define...原创 2018-08-25 21:12:23 · 577 阅读 · 2 评论 -
hdu 5869 - 树状数组 + 离线 + 离散(扩展)
解题思路:首先这题a[i]值最大1e6所以可以不用考虑离散化,但是为了方便数据扩大我强行再加了一个log(n)复杂度进行数据离散化。所以现在的复杂度应该是nlog(n)*log(n),不离散的话一个log(n)就可以了。vec[i]数组保存保存区间右界为i的所有gcd情况和该gcd最后出现的位置,那么从i位置一直向左扫gcd肯定是会越来越小的或者不变,变小的话最少变小2倍,所以一个前缀gcd个数不...原创 2018-05-17 20:34:18 · 299 阅读 · 0 评论 -
CF 652D - 离散化+树状数组
解题思路:根据l从大到小排序之后,且相等的l按r从小到大排序。那么肯定就保证了后面的区间左边界肯定包含了前面的区间,那么接下来要做的就是用r做树状数组去维护前缀和就可以了。#include<bits/stdc++.h>using namespace std;typedef long long ll;const int mx = 4e5 + 10;int n,sum[mx],an...原创 2018-05-17 15:14:41 · 301 阅读 · 0 评论 -
zoj 2112(主席树套树状数组+优化)
题解思路:如果直接对原来的数组建立主席树套树状数组的空间复杂度是((n+m)log(n+m)*log(n+m))这样明显爆炸,那么我们可以对原来的数组建主席树模型,空间复杂度就是n*logn,对m里面的修改建主席树套树状数组空间复杂度是m*logm*logm明显小了很多。#include#define lson l,mid#define rson mid+1,rusing nam原创 2017-12-02 19:04:24 · 324 阅读 · 0 评论 -
poj 2886 - 树状数组+二分
题解思路:这里我们可以将逆时针一同转化为顺时针,那么就是如果逆时针跳过m个人那么顺时针应该是k(圈里现有人数)-m+1,为什么要加1呢,因为我们出发点是上一次被淘汰的那个人,他已经不属于这个圈子了,所以转化成顺时针要多加1,那么我们假设刚刚被淘汰的人在po位置,那么无非是两种情况:下个被淘汰的在po-n中或1-po中,如果po-n中的人数不够的话那肯定就在1-po中,这个可以用树状数组维护,另原创 2017-10-27 21:20:41 · 369 阅读 · 0 评论 -
Codeforces Round #423 Div. 2-专题
A:水题不懂的看下代码就懂了#include#include#include#include#include#include#define lson l,mid,rt<<1#define rson mid+1,r,rt<<1|1#define inf 0x3f3f3f3fusing namespace std;typedef long long ll;const int原创 2017-07-12 20:33:51 · 208 阅读 · 0 评论 -
HIT-1867-树状数组
题解思路:用O(sqrt(n))判断是不是素数,然后直接套数组数组。(我就奇怪了为什么还要C=0这种操作,我判断循环写&&C不行,C+n+m才行)代码:#include#include#include#include#include#define lson l,mid,rt<<1#define rson mid+1,r,rt<<1|1#define inf 0x3f3原创 2017-07-11 16:21:44 · 240 阅读 · 0 评论 -
SPOJ-1029-二维树状数组
题解思路:就是个纯二维树状数组代码:#include#include#include#include#define lson l,mid,rt<<1#define rson mid+1,r,rt<<1|1#define inf 0x3f3f3f3fusing namespace std;typedef long long ll;const int mx = 1e3原创 2017-07-11 15:29:48 · 230 阅读 · 0 评论 -
Comet OJ - Contest #5 A-E
题目链接:https://www.cometoj.com/contest/46/problemsA.迫真字符串#include<bits/stdc++.h>using namespace std;const int mx = 2e5+7;int a[20],n;char s[mx];int main(){ scanf("%s",s); for(int i=...原创 2019-06-18 19:25:52 · 543 阅读 · 0 评论