首页 > 其他分享 >qbxt 突破营 Day7 T3

qbxt 突破营 Day7 T3

时间:2023-10-09 15:36:55浏览次数:36  
标签:leq Day7 线段 T3 pos qbxt 区间 维护 小葱

小葱想要吃糖,小葱将拿出来的N颗糖排成一排,第\(i\)颗糖的美味值为\(a_i\)。小葱很喜欢吃糖,所以小葱会从\(N\)颗糖选择不超过\(K\)段不相交的区间的糖果吃掉。但是小葱同学不希望别人吃到和他美味度差不多的糖,所以对于一颗没被吃掉的糖,小葱希望这颗糖美味度比他吃的糖的美味度最大值还大或者比他吃的糖的美味度最小值还小,所有没被吃掉的糖都要满足这个条件。那么,小葱有多少种吃糖的方案呢?(两种方案不同当且仅当吃掉的糖不同,与选择的区间无关)

对于\(100\%\)的数据,\(1\leq N\leq 10^5,1\leq K\leq 5,1\leq a_i\leq 10^9\),所有\(a_i\)互不相同。

赛时想到了扫描线 \(+\) 线段树,但信息没有很好的利用起来,还想到了并查集 \(+\) 堆 \(+\) 倍增那去了,赛后还发现想假了,不做评价……

很容易想到 \(a_i \Rightarrow pos_i\) 的转化,也可以知道右端点扫描线,关键是线段树上维护什么?起初我想的是线段树上维护 \(0/1\) 表示当前是/否能成为答案。但显然区间的增减不好维护,因此我们改为在线段树上维护 \(i \sim r\) 被分成了多少个连通块

发现当加入一个数 \(a_{pos_r}\) ,会让线段树 \([1,r]\) 区间 \(+1\) ,\([1, a_{pos_r - 1}]\) 区间 \(-1\) , \([1, a_{pos_r + 1}]\) 区间 \(-1\) ,原因容易想到

但怎么求 \(\leq K\) 的个数?(重点) ,我们发现可以在线段树每个节点上维护前 \(K\) 小的连通块大小和这个大小的个数(注意这个连通块大小是去重后再计算的,也就是说 1 2 2 2 2 2 3, K = 3 会被记录为 (1,1), (2,5), (3,1) )

合并时怎么合并?把两个区间暴力差在一起排个序再把前 \(K\) 大取出来即可,个数的合并时 trivial 的不讨论

复杂度 \(O(n K \log n)\)

其实线段树维护连通块个数并不难想,可能只是赛时的我傻逼了。但对于后面维护 \(\leq K\) 的个数是一个非常好的维护方式,可以参考

标签:leq,Day7,线段,T3,pos,qbxt,区间,维护,小葱
From: https://www.cnblogs.com/fox-konata/p/17751827.html

相关文章

  • qbxt 突破营 Day7 T2
    小葱将买来的糖放进了冰箱冷藏,但是小葱想吃糖了,小葱希望把自己想吃的糖从冰箱里面拿出来。具体来说,小葱同学的冰箱是一棵\(N\)个点的树,每个点有一颗糖,第\(i\)个点的糖的美味值是\(a_i\)。小葱每次取糖会从根节点出发,指定一个目标节点\(p\),走到\(p\)点并且把这条路径上的所有糖取......
  • 紫书Unit3.字符数组
    charc语言中字符型关键字用char表示,实际储存的是字符的ascll码。字符串是以‘\0’结尾。同时,字符常量可以用单引号表示,'a',在语法上可以将字符当作int使用,`'a'+1会输出98; scanf输入charscanf("%s",s),遇到空字符会停下来。 //3.5TEX中的引号,将特定符号转化//输入"To......
  • qbxt 突破营 Day1 T4
    考虑经典的俄罗斯方块游戏,二维平面上有若干个积木,他们会受重力的影响下落并堆叠。注意,积木只会竖直下落,如果下落过程中碰到了别的积木那么就会停下。例如下图:不同颜色的块代表了不同的积木,这些积木下落之后会形如下图:积木的形状可以任意的,可能跟传统的俄罗斯方块有一些不同,比......
  • 再谈 qbxt2023国庆刷题 Day7 T2 树
    T2倍增+换根即可,但赛时难写赛时想得线段树二分,也可from:https://www.cnblogs.com/fox-konata/p/17742669.html回头一看老师代码,发现换根换的非常神奇,长见识了方法0:第一次思考,以为要记录走排名为\(a_x\)和\(a_x+1\)的两个倍增数组,但发现并不好合并,也许可以憋出来,但还是......
  • ElasticSearch8.10.2接入SpringBoot3.+
    pom.xml文件引入依赖 <!--https://mvnrepository.com/artifact/org.elasticsearch.client/elasticsearch-rest-client--> <dependency> <groupId>co.elastic.clients</groupId> <artifactId>elasticsearch-java</artifactId> &l......
  • qbxt2023国庆刷题 Day6 ~ Day7
    Day6\(100+30+100+0,rk3\),考成这样还能\(rk3\),好怪啊虽然但是\(T3\)是在\(oeis\)上找的,虽然写了随机数但还是运气好过掉了\(T2\)应该是写寄了吧,感觉自己做法并没有什么问题T1比较典的题,并查集维护下一个没被删的点即可复杂度\(O((n+Q)\alpha(n))\)T2题目里的同......
  • Springboot3
    Java17以上1.依赖<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.0.0</version><relativePath/></parent>2.新特性2.1JakartaEE......
  • NOIP2023 国庆集训 A 组 Day7
    T1思路:因为只有三个串故枚举其中一个为调换的串,再枚举k验证即可。T2思路:正着不好做,考虑反着做。这样就不会覆盖之前的。赛时没想到这个常见套路,正难则反。T3事实上只有一种情况,故只需倒着枚举遇到a统计答案。使用一个变量sum来记录遇到下一个a的次数如果枚举到b,sum+=1。......
  • qbxt2023国庆刷题
    Day0晚上玩恐怖游戏好吓人\(QwQ\)Day1rk4有小奖品T1没什么好说的T2原题给定一个等差数列,求他的各项乘积,你只需要输出其对\(1145141\)取模的结果。具体的,每组给定\(d,n,a\)分别表示公差,长度,首项,你需要求出\(\prod_{i=0}^{n-1}(a+i\timesd)\mod1145141\)。非......
  • qbxt 4220: 矿泉水
    原题一行人,共有\(n\)个人,排成一排,在等待你发放矿泉水。你会发放\(m\)轮矿泉水,第\(i\)次,你会给前\(a_i\)个人发放矿泉水,然后你会发放\(b_i\)瓶矿泉水。具体的,你每次会一瓶一瓶的发矿泉水,每一轮发放\(b_i\)次。每次,你会把矿泉水给最需要的人,即前\(a_i\)个人中,当......