
树状数组
pubgoso
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
2019-2020 ACM-ICPC Pacific Northwest Regional Contest (Div. 1) K - Computer Cache
题目链接第一眼看到这个题目以为是平衡树类的题,但是这样内存不太行(很大可能是我没做多少平衡树的题我们把m个数组拉成一个数组,赋予连续的编号,区间赋值相当于就是线段树上区间赋一个等差数列。我们询问的时候可以单点查询这个位置具体是哪个数组的哪个元素。由于m个数组存在的区间更新问题。所以我们可以更新线段树的时候加上一个时间戳。把更新操作加上时间戳全都提出来,询问操作也提出时间戳存下来。问题就转变成了一个区间加法 加单点查询的问题了。。。#include <bits/stdc++.h>usi原创 2020-12-20 11:00:02 · 453 阅读 · 1 评论 -
2020-2021 ACM-ICPC Brazil Subregional Programming Contest M - Machine Gun
题目链接敌人(x,y)(x,y)(x,y)能被(xm,ym)(x_m,y_m)(xm,ym)打中当且仅当:ym−x−xm2≤y≤ym+x−xm2y_m- \frac{x-x_m}{2}\leq y\leq y_m+\frac{x-x_m}{2}ym−2x−xm≤y≤ym+2x−xm我们化简一下这个不等式,x,yx,yx,y放一边,xm,ymx_m,y_mxm,ym放一边:{ 2y−x≤2ym−xm−2y−x≤−2ym−xm\begin{cases}~原创 2020-12-16 14:55:53 · 570 阅读 · 0 评论 -
hdu5517 Triple
题目链接题意有一点点绕…但最终就是找三维坐标内满足没有点的三个坐标都大于此点的点的数量。首先先按输入的b,e分组。然后枚举不同的b,一个小trick就是同组中,将c,d放到二维坐标中必然右上角是没点的时候,这个点才能通过选本组中最大的a来使得满足条件。这些点可以通过bit来check,注意c,d相同的点要放在一起check。用pair数组d[c][d]d[c][d]d[c][d]来表示最大的a,和数量。不同的组中,相同的c,d应该取最大的a。最后搞完之后,就枚举c,d来累计答案。但是还有一些点是原创 2020-10-14 00:29:47 · 137 阅读 · 0 评论 -
2020牛客暑期多校训练营(第七场)C.A National Pandemic
题面链接思路:一个很显然的操作是把w−dis(x,y)w-dis(x,y)w−dis(x,y)写成w+depx+depy−2deplca(x,y)w+dep_x+dep_y-2dep_{lca(x,y)}w+depx+depy−2deplca(x,y)前三项都能用一个变量累加出来,那么主要问题就是如何较快的求deplca(x,y)dep_{lca(x,y)}deplca(x,y)。那我们可以对树进行轻重链剖分处理,对每条链维护两个bit。一个维护个数,一个维护dep的和。每个update操作原创 2020-08-01 23:59:58 · 549 阅读 · 0 评论 -
牛客练习赛58 F.XOR TREE
题目链接思路:给的一条路径,统计所有被奇数个路径包含的点的异或和。路径上的点显然是深度连续递增的点,那么我们根据两端深度的奇偶情况就可以知道路径上的哪些点是有贡献的,加上即可。把路径剖出来,用bit维护一下异或和即可。#include <bits/stdc++.h>using namespace std;typedef long long LL;const int N =...原创 2020-02-29 17:16:04 · 332 阅读 · 0 评论 -
2019icpc徐州网络赛I query (离线+树状数组)
题目链接大意:给你一个数组,每次询问一个区间,问你区间l,rl,rl,r内合法的(i,j)(i,j)(i,j)有多少对。若min(ai,aj)=gcd(ai,aj)min(a_i,a_j)=gcd(a_i,a_j)min(ai,aj)=gcd(ai,aj)则合法。思路:离线处理。先预处理出和每个i构成合法区间的所有j,我们用两个vectorvectorvector来存,一个表示比他...原创 2019-09-09 21:53:10 · 347 阅读 · 0 评论 -
2019南京网络赛F 树状数组+主席树
题目链接大意:输出每个i为开头情况下的满足字典序最大的长度。思路:每个i的答案显然是在[pos-k,pos+k]中取一个最大的且不超过i的答案+1,那么,我们可以用树状数组预处理出每个i在区间内小于他的个数,然后用主席树直接差区间第x小即可。树状数组的操作细节为,把区间拆成左右两部分,然后求前缀小于i的值,两个剪一下就是区间了。细节见代码#include<bits/stdc++.h...原创 2019-09-03 15:08:58 · 131 阅读 · 0 评论 -
2019南京网络赛A 树状数组+思维
官方题解:代码如下:#include<bits/stdc++.h>#define fi first#define se second#define mp make_pair#define pb push_back#define LL long long#define pii pair<int,int>#define SZ(x) (int)x.siz...原创 2019-09-03 14:59:36 · 235 阅读 · 0 评论 -
hdu6592 Beauty Of Unimodal Sequence(树状数组+贪心)
题目链接大意:给你一个数组,让你求出最长的 字典序最大和最小的(先升后降)单峰子序列思路:考虑dpL[i][0]表示a[i]一定取,序列a[1..i]的最长上升子序列长度。L[i][0]表示 a[i]一定取,序列a[1..i]的最长上升子序列长度。L[i][0]表示a[i]一定取,序列a[1..i]的最长上升子序列长度。L[i][1]表示a[i]一定取,序列a[1..i]的最长单峰子序列长...原创 2019-08-03 11:14:47 · 485 阅读 · 0 评论 -
hdu6606 Distribution of books(二分+dp+线段树/树状数组)
题目链接大意:给你一个长度为n的数组和一个k,让你将数组连续的分成k段(可以丢弃末尾),使得每段和的最大值最小。思路:先将前缀和离散化,然后考虑二分答案,对每个mid,我们考虑dp来check,枚举每个数i,i∈[1,n]i,i\in[1,n]i,i∈[1,n],如果sum[i]≤mid,sum[i]\leq mid,sum[i]≤mid,那么显然dp[i]dp[i]dp[i]最小是1,然...原创 2019-08-02 15:29:42 · 356 阅读 · 0 评论 -
hdu6609 Find Answer(树状数组+二分)
题目链接题意:给你一个长度为n的数组和一个k,让你对每个i,你可以改变1∼i−11\sim i-11∼i−1的任何一个数为0,使得∑j=1iaj≤k\sum_{j=1}^ia_j\leq k∑j=1iaj≤k,问你对每个i至少需要改变多少个元素的值,每个i独立,互不影响。思路:我们先对a种的元素进行离散化,然后用两个树状数组分别维护前缀和和每个数出现的次数,然后对于每个i显然我们先得二分...原创 2019-07-30 17:07:35 · 599 阅读 · 0 评论 -
2019 计蒜之道 复赛 A. 外教 Michale 变身大熊猫
题目链接题意:本题就是很显然的题意,让你求出共有多少个最长上升子序列,每个数在多少个最长上升子序列中。这题的难点在于如何求出每个数在多少最长上升子序列中,显然可以用dp,直接dp时间复杂度不允许,由于我们只在前缀上转移,于是我们可以用树状数组优化dp,考虑一个结构体数组,有两个值,一个为以当前数结尾的最长上升子序列长度,一个是数量,我们每次遍历a数组(即输入的数组),查询在以[1,ath−1]...原创 2019-07-12 15:50:34 · 210 阅读 · 0 评论 -
cf gym102901K The Stream of Corning 2 离线+bit
题目链接大意:给你一系列操作1:l,val,rl,val,rl,val,r,添加一个val存在于[l,r]val存在于[l,r]val存在于[l,r]区间。2. index,kindex,kindex,k问你存在于 indexindexindex这个位置的第kkk小数,若不存在输出-1;思路:我们可以将1操作的区间两个端点拆开和2操作的时间放在一个数组中进行排序(小的优先)。用opt标记这...原创 2019-05-03 16:37:08 · 247 阅读 · 0 评论 -
出题人的手环(牛客练习赛38D 离散化+树状数组)
题目链接(https://ac.nowcoder.com/acm/contest/358/D)题目描述出题人的妹子送了出题人一个手环,这个手环上有 n 个珠子,每个珠子上有一个数。有一天,出题人和妹子分手了,想把这个手环从两个珠子间切开,并按顺时针顺序展开成一条链。可以发现,这条链一共有 n 种可能性。求这 n 种可能性的逆序对数之积模 1000000007。输入描述:第一行一个数 n...原创 2019-01-18 22:50:02 · 510 阅读 · 1 评论 -
洛谷P1972 【[SDOI2009]HH的项链】
这道题想了很久,发题解是为了理解的更深刻一点。。。(管理放我过好嘛qwq)步入正题:这道题应该是很多做法,我选择的是离线+树状数组。首先输入数组。用fisrt数组先记录元素最开始出现的位置,对应的每一个树状数组的位置add一下(树状数组洛谷也有模板题的了解一下就ok啦)。rep(i,1,n){//for循环的意思(1,n)闭区间 scanf("%d",&amp;a[i]);...原创 2019-01-19 21:13:38 · 252 阅读 · 3 评论