
线段树
二分抄代码
去了18ec没资格去19ec的反向训练选手
展开
-
codeforces1513F. Swapping Problem
https://codeforces.com/contest/1513/problem/F留下了数据结构不扎实的泪水.jpg 这题可把我做吐了先打表看下所有能减少的情况ai bj bi ajai bj aj bibi aj ai bjbi aj bj aiaj bi ai bjaj bi bj aibj ai bi ajbj ai aj bi发现下面4种本质上和上面是一样的然后发现通过交换ab可以由前两种得到第34种所以只要考虑前两种的情况就行了于是傻逼的我用了在树原创 2021-04-14 03:38:29 · 484 阅读 · 2 评论 -
codeforces1477B. Nezzar and Binary String
https://codeforces.com/contest/1477/problem/B这题发现最后的字符串是固定的,且每次只能修改严格小于长度的一半那么可以发现从后往前还原回去,每一段是还原成全是1还是全是0就是确定的,因为最多修改严格小于一半那么就是线段树区间查询区间覆盖,还原完第一次以后还要跟初始串比较一蛤#include<bits/stdc++.h>using namespace std;typedef long long ll;const int ma.原创 2021-01-29 22:32:12 · 307 阅读 · 0 评论 -
1002 Breaking Down News 2020杭电多校第8场
http://acm.hdu.edu.cn/contests/contest_showproblem.php?pid=1002&cid=886这个榜歪到天上去了,LCT过120队,这题线段树裸题过30+队这题就是dp[i]只能从dp[i-R]---dp[i-L]这段转移过来,那么对前缀和离散化一下,把前缀和当下标维护一棵权值线段树,记录区间段最大的dp值,注意这题由于可能有重复的前缀和,所以不要unique,就是排序然后就可以让一个位置的sum[i]确定一个下标,就不用考虑重复的问题了。原创 2020-08-13 17:00:59 · 492 阅读 · 0 评论 -
A-Ancient Distance 2020牛客多校第4场
https://ac.nowcoder.com/acm/contest/5669/A这题主要是要想到K为定值时,如何找出最短距离于是我们可以二分最短距离x,然后再这棵树中,每次找到一个深度最深的点,然后从这个点向上走x到祖先anc,然后把anc标记为key点,并把anc所在的子树删除,重复这个过程直到把1拿掉,那么这就是最小的数量。删除子树,树上dfs序建线段树经典题,子树在dfs序上是连续的编号,于是删除就是区间覆盖想到这个最小的数量就很好求了我们直接枚举最短距离从1->mx,0的时原创 2020-07-21 02:47:39 · 342 阅读 · 0 评论 -
H-Happy Triangle 2020牛客暑期多校训练营(第二场)
https://ac.nowcoder.com/acm/contest/5667/H离散化后用set和数量数组num维护这个multiset对于询问3,如果x是作为最长边,那么我们只需要找到集合中刚好<=x的两个边,如果作为中间边,就找到大小相邻的两个,如果作为最小边,那么就去>x的所有边中找两个大小相邻的a<=b,使得x+a>b,也就是b-a<x,也就是大小相邻的最小的要小于x就行了在维护multiset的时候顺便用线段树维护每一个离散后的值i,他如果在集合中,且原创 2020-07-13 18:55:11 · 268 阅读 · 0 评论 -
codeforces1359D Yet Another Yet Another Task
https://codeforces.com/problemset/problem/1359/D这题一看发现是枚举最大值,维护所有存在的区间,并用线段树维护区间最大子段和。。。然后发现E只比这题少过一点人,就果断先开的E,以为这道题真的这么难。写完了以后150行,还拿样例逐步调试看哪里有问题没有最后才敢交,结果最后学弟说20行,只要枚举最大值,然后从前往后扫得到最大值就行了。。。日#include<bits/stdc++.h>using namespace std;typede原创 2020-05-29 01:40:47 · 255 阅读 · 0 评论 -
2020KickStart RoundC Candies
https://codingcompetitions.withgoogle.com/kickstart/round/000000000019ff43/0000000000337b4d这类似的题去年暑假就见过了,然而没写过。。。导致现场推了好久才写出来,不然应该更快,就不会只有200+名了。。。对每个线段树节点维护两组值,第一组cnt[2]是这一段+-+-..的和,第二组sum[2]是这一段+1-2+3-4..的和每一组还要维护开头符号是+的和是-的两种情况考虑我们要求query(l,r,f)原创 2020-05-17 22:35:36 · 333 阅读 · 0 评论 -
gym101482K nwerc2014 Knapsack Collection
https://codeforces.com/gym/101482/水题写一年离散化一下坐标,假设排序后的坐标是a[1],a[2],那么[ a[1]+1 , a[2]]这一段区间的情况都是相同的,区别只是第一次收拾行李的时间不同,最大值肯定从某个a[i]+1开始,最小值肯定从某个a[i]开始,均值搞个等差数列求和就行了,每次取走一个后找下一个,我用的是线段树上二分找下一个,O(n^2log...原创 2020-04-19 11:50:41 · 225 阅读 · 0 评论 -
codeforces1295E Permutation Separation
https://codeforces.com/contest/1295/problem/E状态下降有点厉害,水题花了挺久的时间,而且线段树tag+=写成=,LL x=tag写成int x=tag,浪费了不少时间我们可以很容易地想到这题有两个变量,一个是在哪里截断,一个是最后要让哪些元素在左集合,哪些元素在右集合。那么我们可以想到维护一个这样的答案ans[x],在当前的截断情况下,如果让...原创 2020-02-05 23:11:24 · 143 阅读 · 0 评论 -
codeforces1252K Addition Robot
https://codeforces.com/contest/1252/problem/K艹了比赛的时候区间翻转的tag写错了,翻转应该^1的不应该直接=1的,WA到结束也没找出错,我好菜啊对于A,B的值维护一个矩阵,A操作和B操作按顺序执行就是A,B的值按照矩阵连乘来变区间AB翻转操作就是把矩阵交换一下,用个tag^=1来记录一下求区间的值就把这段区间的矩阵连乘的结果查询出来再跟...原创 2019-11-11 18:24:59 · 181 阅读 · 0 评论 -
codeforces 1217E Sum Queries?
http://codeforces.com/problemset/problem/1217/E比赛的时候没看懂这题。。。。后来重新看了一遍题目,看懂就发现是水题了。。。不过一直没找到时间补,拖到今天写了因为是要求一个子集,让这个子集的和的十进制表示中的某一位数与这个子集每个数字的这一位上的数字都不想等,那么很快就能想到其实只要找到2个这一位上不等于0的就行了。那么我们只要考虑1-10位...原创 2019-09-18 16:22:08 · 183 阅读 · 0 评论 -
hdu6638 Snowy Smile 2019杭电多校第6场
离散化x,y坐标,就变成一个矩阵求最大子矩阵和的问题子问题就是个动态维护区间最大子段和线段树每个节点记录4个值,sum为区间和,lrmx为区间最大子段和,lmx从l开始向右的最大子段和,rmx从r开始向左的最大字段和这4个值就可以每次pushup了。然后枚举上边界和下边界,每次下边界+1就把这一行的不为0的点更新到线段树中,由于只有n个点,那么下边界一直移到最后,线段树也最多只会更...原创 2019-08-07 17:04:09 · 314 阅读 · 0 评论 -
Find the median 2019牛客多校第七场 E
传送门:https://ac.nowcoder.com/acm/contest/887/E考场上早点开这题就好了,到最后也没有过样例主要还是离散化区间变成点的这种线段树题写的太少了,上次写可能是17年暑假卢总挂的题。。。18年湖南省赛那道题也是离散化后要用一个点代表一个区间,然而当时就不敢写那题赛后想清楚很快就改好了,但是因为进入线段树找恰好是中位数的地方出了一些问题,WA了一发。...原创 2019-08-08 20:56:32 · 464 阅读 · 0 评论 -
hdu6602 2019杭电多校第二场 Longest Subarray
这题考场上都没去自习思考。。。其实就是个cf div2 D题难度的线段树,比那个三角形简单多了。。。我们枚举每一个区间r,看他左边最远的是的l-r合法的l,可以想到,r所在位置的数字a[r]从最左边到a[r]上k个前出现的位置lastk[r],1---lastk[r]是对于a[r]这个数字是满足条件的,因为从r到那段区间的位置a[r]的出现次数是>=k的。我们建线段树,枚举r=1-&...原创 2019-07-26 00:48:39 · 328 阅读 · 0 评论 -
codeforces 1187D
传送门:https://codeforces.com/problemset/problem/1187/D比赛中写了个假的FST了,不过还好E题是个水题而且写得够快,还是上了一大波分那天晚上网友给了个hack数据51 3 5 4 21 2 3 5 4这个是YES,然后我就发现我没了,然后去hack了十多个人,结果发现edu赛后hack不加分。。。后来补题瞄了一眼题解,发现把整...原创 2019-07-19 00:18:35 · 405 阅读 · 0 评论 -
CodeForces - 609F+windows下bat对拍脚本
思路其实挺简单的,只是细节问题很大。。。首先想到将frog排序,然后用frog的编号大小代表先后,将mos的坐标离散化,离散化后的坐标用线段树记录该点所对应的最小的frog的编号,也就是xi最小的frog是那个。按时间添加mos,如果已经有frog可以吃到,那么吃,吃完了后还要维护该frog能不能吃到更远的,如果不型,则用map存下这个mos,注意一个位置可能有多个mos。线段树用ta原创 2017-09-23 09:30:09 · 566 阅读 · 0 评论 -
HihoCoder - 1058
考场上看到这题以为splay于是跳过了= =,之后尝试自己写然而并是想不清楚关于3种tag的传递,WAWAWAWAWA,于是拿出qt的标程开始改自己的代码,然后二分查错。。。其实传递没那么复杂。。。染色tag时,把加法和等差数列的tag都清除,之后如果有加法或等差数列tag要打,那就和染色tag并存,向下穿tag时,先传染色tag,再传其他的,因为等差加和全加的tag,相当于覆盖在之前已经有的染色原创 2018-01-25 19:54:53 · 181 阅读 · 0 评论 -
codeforces 1000F
明明看着像道水题,可就是想不出,如果它是求只出现一次的数字的个数就可以O(1)转移的莫队了吖,一开始看错题意了。后来改成将那些数字存入set中,然而因为set是logn的复杂度,而且莫队的sqrt(n)的常数已经够大了,5*1e5实在3s艹不过。没办法,看了看题解,果然还是道水题,离线操作我会的还是太少,这题是对询问按照r对区间进行排序,线段树每个节点维护的是那个位置的数字a[r]的上一个...原创 2018-07-19 21:15:11 · 486 阅读 · 0 评论 -
HDU6315 多校第二场1007
分块涛开始了他的分块,据说这是他第一次写重构,于是喜闻乐见T掉了。优化到最后极限数据还是要跑70s,常数需要再优化30倍。。。最后半小时发现b是一个1到n的排列。。。然后并不知道有什么用。于是15分钟后没过一题,挂机4小时45分钟,虽然qt成功get成就在多校中拿一血可以吹一年,不过我们还是太菜了。1-n的排列,那么每个元素最多加q次,那么答案最大是q+q/2+q/3...q/n约等于qlnq...原创 2018-07-26 09:10:40 · 191 阅读 · 0 评论 -
牛客2018多校第四场 J Hash Function
考场上队友写的据说是nlogn,然而并是超时,赛后听说题解是线段树区间优化建图,感觉挺神奇的特地写了一蛤。题意是模拟hash按顺序插数字,顺序寻址法,告诉你最后插完后的hash表,问你插入数字的顺序的最小字典序。于是对于每个插入的数字,算一蛤他原本的位置是在哪里,那么从原本的位置到他的上一个位置,都必须在他之前插入,于是我们想到了拓扑排序,但是由于他原本的位置距离他很远,直接连边会导致复杂度为n^...原创 2018-07-29 20:25:06 · 468 阅读 · 0 评论 -
2018牛客多校第6场 I Team Rocket
考场上用的set存储,然后就case:60%超时了。。。。用vector存可以少一个log,2900ms过得,常数还是不太好。。。我们对每个区间的左端点进行离散化,然后线段树每个叶子节点表示为左端点离散化后的值,每个点存一个vector,里面存储区间左端点在当前节点表示区间中的区间的右端点的值,那么我们对于每一个摧毁的位置pos,二分找到比pos小或等于的最近的左区间端点离散化后的值x,那么我们就...原创 2018-08-06 09:09:48 · 201 阅读 · 0 评论 -
HDU6356 Glad You Came
一开始我就加了剪枝,如果当前更新的值比这一段的最小值都小就返回不更新,然后过不了样例。。。于是去掉对更新操作排了一遍序,才能过样例,接下来就T了,因为mlogn更新mlogm排序太慢了,于是qt开始接受优化工作,qt这个暑假已经不知道卡了多少次常数过不去了,zkw,手动开O2,register什么都加上了,26s被优化到6s。。。还是超时。赛后aols说他这样过了,我回去检查一蛤,aols 告诉我...原创 2018-08-06 20:11:04 · 563 阅读 · 0 评论 -
codeforces 1023D Array Restoration
考场上东拼西凑打补丁才做出来,多次找到hack自己的数据,WA ON pretest6 5发,然后想到最后一个数字必须出现,被之前的数字覆盖也要出现,才A掉。首先想到对于每个出现的数字,记录一蛤这个数字最左边出现的地方L[i]和最右边出现的地方R[i],说明在第i次query的区间至少要包括L[i]到R[i]这段区间,那么我们直接模拟一蛤区间覆盖,看一蛤最后的情况a数组和目标数组to的关系如何。接...原创 2018-08-18 12:17:02 · 329 阅读 · 0 评论 -
HDU6406 Taotao Picks Apples
题意:给你一个序列,n个点m个询问,问你如果把第p个数字变成q,第一个元素为开头,遇到大的必选的严格上升子序列的长度考场上很久才A掉,太菜了QAQ,突然想起这种必取的之前在claris的多校中做过,倒着单调队列就能预处理出以每个元素开头,遇到大的必选的严格上升子序列的长度upnum[i],于是我们就想到了吧询问离线倒着处理,先预处理出原本应该在队列中的是哪些元素,然后我们看当前询问的最近的原队...原创 2018-08-16 10:11:29 · 481 阅读 · 0 评论 -
FZU 2297
这题新人队2小时就A了,然后我队中期这题根本不知道怎么办,全机房都会做,于是ljn开始写mod质因数分解一蛤,mod的质因数单独拿出来算,mod<1e9所以最多30个不同的因数,因为2^30>1e9,然后对每一个mod的因数开个mp[j]存数字,cnt[j]存mp[j]在答案中的幂次,对于每一个乘起来的数a[i]我们都把里面mod的质因数给剔到cnt[j]中,然后不是mod的因数就与m...原创 2018-08-24 20:11:05 · 255 阅读 · 0 评论 -
cf 1117G Recursive Queries
2500分的题还是不会做,菜哭.jpg,看了网上题解,觉得十分精妙其实f(l,r)相当于一个不断删数字然后求产生的价值和的过程,设第i个数字左边第一个比他大的数字为第lind[i]个数字,右边的为第rind[i]个,那么删掉第i个数字,留下左右两边的数字,所产生的价值就是(rind[i]-1)-(lind[i]+1)+1,也就是这一段的长度。吧询问离线,然后分两段计算,这样就不会重复计算,...原创 2019-02-26 21:14:18 · 387 阅读 · 2 评论 -
2019南昌邀请赛网络赛 J. Distance on the tree
最基本的离线询问,然后跑数据结构。此题因为是求边的数量,但是我的树链剖分模板是给点加值和求和求最大值,于是我们在树上每条边中间加一个点,那么这个点的权值就是边的权值。对边排序,对询问排序,k从小到大处理询问,每次把当前询问小的边加到线段树的点里面,然后求路径上有多少个满足条件的边就是树链剖分后线段树idx[u]到idx[v]的权值和了。队友状态不好,丢给我这个只写过一道模板题树链剖分的...原创 2019-04-21 00:22:14 · 512 阅读 · 0 评论 -
POJ2528
今天发现了离散化的一个神坑,处理区间覆盖问题用离散化时,不相邻的数字一定要在中间多添加一个不存在的数字,不然的话,比如你覆盖1 15,1 5,10 15,若1->1 ,5->2,10->3,15->4,则终于最后只能看见1-2 3-4,而实际上可以看见1-5 6-9 10-15,然后就是区间覆盖问题从后往前添加,如果这一个区间被填满了就不用填了。然后一个蜜汁错误,gank明明没用,然而加在re原创 2017-08-15 18:02:04 · 304 阅读 · 0 评论