
树状数组
二分抄代码
去了18ec没资格去19ec的反向训练选手
展开
-
Aizu - 2782 C - We don‘t wanna work!
https://vjudge.net/contest/145955#problem/C这题朴素想法就是平衡树模拟操作一下就行了但因为可以离线,而且前后顺序是影响先后的,所以我们可以把所有加入的人搞个离散化,值为第一关键字,进队时间为第二关键字排个序然后他们的下标就可以体现他们的相对大小了,每个人都是不同的,而且对于相同名字不同时间进来的人,也是不同的那么最后就是树状数组上修改查询二分一下的事情了#include<bits/stdc++.h>using namespace原创 2021-01-29 20:12:43 · 128 阅读 · 0 评论 -
洛谷P2757 [国家集训队]等差子序列
https://www.luogu.com.cn/problem/P2757#include<bits/stdc++.h>using namespace std;typedef unsigned long long ull;const int maxl=1e5+10;const int bas=1423333;int n,ans;int a[maxl],pre[maxl],suf[maxl];ull mi[maxl];struct bit{ ull b[maxl];原创 2021-01-28 00:59:31 · 265 阅读 · 1 评论 -
gym102861E. Party Company
https://codeforces.com/gym/102861/problem/E听课也更不上,比赛过了一车人的题也不会,没了啊这题很显然我们可以看出,由于最后一定是一个连通块属于同一个组,那么由组长o我们可以倍增到最上面的领导o1,使得最上面恰好逼近r那么最显然的想法就是从这个根节点o1开始,他子树中所有>=l的都会+1,那么子树问题显然可以用dfs序来维护,按dfs序标号,然后分块对每块内部排序,然后左右边界的块暴力找,中间的块一定在子树中,就直接二分后用差分数组作区间加法O(原创 2021-01-26 23:38:26 · 471 阅读 · 0 评论 -
gym102769B. Bounding Wall ccpc2020秦皇岛
https://codeforces.com/gym/102769/problem/B写完到调试到对拍出来前前后后用了6个小时,写这种大模拟还是功力不够。。。现场感觉是不可能写出来的,现场也只有pku和渡渡鸟过了这题思路挺简单的,就枚举这个点在分别的左右上下边界上大致讲一下在左边界上怎么求最大的矩形首先l[i][j]表示i能连续最左边到哪,也就是最小的j,r[i][j]为最优边,u[i][j]为最上边也就是最小的x,d[i][j]最下边然后先求出上边最高可以到哪,由于(x,y)在左边界,原创 2020-10-30 22:51:52 · 261 阅读 · 0 评论 -
codeforces1437E. Make It Increasing
https://codeforces.com/contest/1437/problem/E看清楚是严格递增序列那么无解的情况就是相邻两个差得太少的情况,必须满足a[b[i]]-a[b[i-1]]>=b[i]-b[i-1]才行然后对每两段中间,如果跟左右限制a[b[i]]和a[b[i+1]]差得太少不行,直接ans++否则则搞一个最不下降子序列,由于是要严格递增,我们就给每个地方变成c[j]=a[j]-a[b[i]]-(j-b[i]),这样把按下标至少严格递增1也考虑进去了,那么搞个最长原创 2020-10-28 01:01:49 · 321 阅读 · 0 评论 -
E Phone Network 2020ICPC·小米 网络选拔赛第一场
https://ac.nowcoder.com/acm/contest/7501/E看了看题解没太看懂怎么维护最小值的,学习了一下杭二oi爷的代码学会了按数字1-m的顺序求答案,因为求数字i的时候必须1-i-1都要出现过,所以求当前数字直接在之前的基础之上维护就行了我们维护从每个位置开始,1-i都出现过的最小右端点位置Ri,l,跟题解里面定义是一样的,按从左到右顺序枚举数字的位置,我们就是需要吧[last+1,id]这一段中小于id的更新为id,用树状数组维护前缀最大值,每个Ri,l等于prem原创 2020-10-27 20:08:07 · 216 阅读 · 0 评论 -
codeforces1436 E. Complicated Computations
https://codeforces.com/contest/1436/problem/E直接用权值树状数组暴力模拟就好了,想了一年想不出来树状数组b[i]记录值为i上次出现的位置在哪,getmi求前缀最小位置在哪里然后枚举右端点,不断地更新最小位置,一开始b[i]初值全部设成n+1然后考虑直接右端点就是n,每个数字上次出现的位置就是他最后出现的位置如果对于某个数字i,last[i]!=n && getmi(i-1)>last[i],也就是从末尾到i最后出现的位置,原创 2020-10-25 02:15:12 · 535 阅读 · 0 评论 -
fzu 2320 切割逆序对 2020福州大学校赛重现
http://acm.fzu.edu.cn/problem.php?pid=2320显然是切得越多答案越小那么就从左到右枚举切一刀的位置,维护两个树状数组,左边的数字情况和右边的数字情况。那么向右挪动一位,就相当于把a[i]从右边换到左边,那么就减去a[i]与右边数字组成逆序对的数量,加上a[i]与左边组成逆序对的数量就行了。#include<cstdio>#include<algorithm>#define pb push_backusing namespa原创 2020-08-23 21:18:28 · 190 阅读 · 0 评论 -
codeforces1354D Multiset
https://codeforces.com/problemset/problem/1354/D这题直接用树状数组的找第k小数的一个log复杂度的方法做然而之前t了一发。。。然后加读入优化后发现我之前自己的板子不能读负数。。。。尝试自己写后过了样例但是wa了。。。后来网上抄了一个读入优化过了。。。#include<bits/stdc++.h>using namespace std;typedef long long ll;#define reads(n) FastIO::原创 2020-05-17 22:01:49 · 271 阅读 · 0 评论 -
hdu6240 Server
http://acm.hdu.edu.cn/showproblem.php?pid=6240multiset常数也太大了,改成区间求最小值树状数组3.6s过,加fread2.9s,然而multiset+fread 10s都过不了01分数规划,二分答案mid,那么总的bi*mid-ai>=0mid就是可以的答案,那么单个的>=0的肯定必选,接下来只要判断能否在总和>=0的情...原创 2019-10-29 10:43:14 · 271 阅读 · 0 评论 -
2019徐州网络赛 B so easy
https://nanti.jisuanke.com/t/41384树状数组是天,1e6*logn*logn随便跑离散化所有点和区间,要染色的点单点作为一个点,然后两个染色点之间的区间也作为一个点,然后二分找第一个位置在哪。但是牛逼的标程用unorderd_map+并查集,f[x]存x右边第一个在哪,初始的是f[x]=x+1unorderd_map的存取查询操作都近似于O(1),m...原创 2019-09-07 20:17:35 · 428 阅读 · 7 评论 -
The beautiful values of the palace 2019南京网络赛
https://nanti.jisuanke.com/t/41298扫描线,把所有点按照x排序,所有矩阵的查询拆成在[1--x1-1]这个位置减去y在[y1,y2]的所有点的值,在[1---x2]这个位置加上y在[y1,y2]的所有点的值。然后枚举x坐标从左到右,先把坐标为x的点在树状数组中b[y]中加val,然后再处理这个位置的查询,是减去的就减去,是加的就加#include...原创 2019-09-01 23:15:44 · 339 阅读 · 0 评论 -
codeforces 1208D Restore Permutation
传送门:http://codeforces.com/problemset/problem/1208/D大水题= =,比C的构造不知道水到哪里去了从后往前考虑,最后一个s[n]一定就是比a[n]小的所有数字的和,所以可以直接算出a[n]。接下来,s[n-1]是去掉a[n]之后的情况下,比a[n-1]小的所有数字的和,我们也可以知道a[n-1]的值这样用一个树状数组维护一下去掉后面已经...原创 2019-08-27 20:12:51 · 307 阅读 · 0 评论 -
comet OJ #8 D 菜菜种菜
传送门:https://cometoj.com/contest/58/problem/D其实是个水题,不过我当场没有想起来先求一个总的,再用另一个树状数组维护另一个,减去多余的这种套路我们预处理对于每一个点 a[i].id ,他在 [ a[i].ll , a[i].rr ]区间之内不会有可以直接到的点,那么我们按照a[i].ll排序再对所有的询问的区间按照左端点排序。对于每一个询...原创 2019-08-16 10:58:03 · 222 阅读 · 0 评论 -
POJ2352
一定一定要看数据范围!考虑极端情况!#include#include#include#define maxl 32010using namespace std;int n;int b[maxl],ans[maxl];struct node{int x,y;} a[maxl>>1];bool cmp(const node &a,const node &b){ if(a.原创 2017-08-15 19:17:22 · 194 阅读 · 0 评论 -
HDU3333
8.17那天我再考场上用莫队A了这题。。。。其实是可以卡掉的。正解是线段树或树状数组。按照询问的r排序,然后r没向右移动一次,如果这个数曾经出现了,就在这个数原来出现的地方减去这个数,再在当前位置加上这个数。#include#include#include#include#define maxl 30010#define maxq 100010using namespace原创 2017-08-27 18:23:57 · 482 阅读 · 0 评论 -
SWERC2016 Performance Review
OI时期曾用过dfs序,结果今天没想起来。。。。考场上yy树状数组特殊用法奇特姿势,然而没卵用,只能dfs序转成区间。一场比赛A 2题,哇我好弱啊。。给你一棵树 每个结点有r,t值 现在求所有结点i的子树中的r值小于i点的r值的所有结点的t值之和。dfs序遍历,记录每个点访问进去时的dfn,和出来时候的dfn就知道他的子树的区间了。然后按照rank的从小到大进行添加,因为必须是严格小于时...原创 2017-10-07 20:55:13 · 379 阅读 · 0 评论 -
NEERC2014 Problem I. Improvements
题目链接:http://codeforces.com/gym/100553考场上想不到。。。我们知道(此时是按照xi排好顺序的序号i序列,也就是飞船排列实际情况)这种情况的时候是最好的,线段都是包含关系,不会是交叉关系。想到这道题是求最多不动的飞船的个数,于是只要有断断续续的形成这样的图就行了,其他中间不符合规则的点反正是任意飞,一定能找到一个地方合理安置,不破坏那些不动的点的相对原创 2017-10-08 19:52:21 · 449 阅读 · 0 评论 -
Gym - 101485G NWERC2015 G Guessing Camels
本题暴力做听说可以动态树,然而我不会。3维偏序可以用CDQ分治,寒假学了然而考场上不会写。(菜不成声.jpg)再间接一点,我们知道是用总数对减去存在逆序的数对。而逆序就是求两个数列中的两个数字相对位置是反的。如果我们队(a,b)(b,c)(a,c)都进行求逆序对。在三维中,只要满足一对与另外两对相对顺序不同即是不符合的。一对数字不符合正序的在这样的统计中会对cnt贡献2次,那么就ans=C(n,2...原创 2018-03-11 15:38:12 · 345 阅读 · 0 评论 -
2018牛客多校第五场 H subseq
传送门:https://ac.nowcoder.com/acm/contest/143/H这场树状数组用法专场,skydec说这题很套路的题,很简单,然而处理处dp数组后最后的贪心我想了半天还问了一蛤别人,菜不成声.jpg,先处理出dp数组,dp[i]表示以a[i]为开头的从i到n的所有递增子序列的方案数,本来应该用线段树了,然而好多人使用了神奇的树状数组,以前都是add函数从i到cnt,su...原创 2018-08-07 10:41:52 · 306 阅读 · 0 评论 -
2018牛客多校第5场 take
感觉我和队友都是轮流考场上写出来然后对拍拍不出错然后过不了题。。。我队都喜欢在代码下毒。。。而且牛客的评判很畸形,第1个点错就不判了,告诉你通过0%的case,然而我们实在是没想到会错在什么地方。我们考虑每一个点的贡献,那么就是他之前所有比他大的或者等于他的都不出现且比他小的要出现的概率乘以他出现的概率,概率再乘以交换的次数贡献也就是1.然后当前点被计算了以后,如果后面还要计算,计算比当前点小...原创 2018-08-03 11:20:50 · 297 阅读 · 0 评论 -
codeforeces 1187 D 单点修改区间最值用树状数组
网上的好多树状数组的区间最值都是错的啊。。。修修补补过了这题不知道还有没有别的问题。。。先当板子用这吧。。。以后碰到单点修改区间查询再测测#include<bits/stdc++.h>#define maxl 300010 using namespace std; int n,ans;int a[maxl],b[maxl],c[maxl],cnt[maxl],...原创 2019-07-19 12:29:17 · 103 阅读 · 0 评论 -
HDU6606 Distribution of books 2019杭电多校第三场
考场上二分以后只想了贪心,没想DP看见题解里的DP1秒想出来,卧槽巨水,完了水题也不会做了。考虑一个答案,然后dp[i]表示分配前i本书最多可以分给几个人,然后如果无法以i结尾就不更新dp数组然后把前缀和离散化,dp[i]=max(dp[j]+1),sum[i]-sum[j]<=mid ,那么就用sum[j]>=sum[i]-mid,然后二分出最小的离散化值,权值树状数组...原创 2019-07-30 00:19:08 · 698 阅读 · 8 评论 -
hdu6635 Nonsense Time 2019杭电多校第六场
随机数据期望是sqrt(n)的最长上升子序列。。。所以用倒着来做,每次删除数字,如果删除的在当前的最长上升子序列中就重新找一个最长上升子序列期望只要重构sqrt (n)次,那么复杂度为O(nsqrt(n)logn)线段树被卡常,树状数组5600ms过了#include<bits/stdc++.h>#define maxl 50010using namespace ...原创 2019-08-07 21:26:51 · 273 阅读 · 0 评论 -
HDU 2492
这种有点小技巧的题目我都转不过弯,已然GG。考试的时候一直想着如何去算出2个点之间有多少个可以的裁判点,然而完全不好计数。就这样怼了一个半小时,其实转换一下,枚举裁判点,去统计能已该点为裁判点的左右两边的点对有多少,就很简单了,x1是左边比该点搞的,x2是低的,x3是一样的,y1,y2,y3,则是右边的。#include#include#define maxl 100010int原创 2017-08-17 08:08:53 · 274 阅读 · 0 评论