05 2022 档案

摘要:简单的省选题...... 打异或标记即可。 1 #include<bits/stdc++.h> 2 const int N=2e5+10; 3 using namespace std; 4 int n,m,a,b,c; 5 struct node{ 6 int l,r,num,lazy; 7 }t[ 阅读全文
posted @ 2022-05-28 15:07 YHXo 阅读(22) 评论(0) 推荐(0) 编辑
摘要:相比模板1,这道题增加了乘法的操作,不难想到打两种标记,一种加法,一种乘法。 打加法标记tag1时,直接加就行了,tag1+=x; 打乘法标记tag2时,tag2*=x,tag1*=tag2,因为之前加的数也要乘进去。 下传标记也是相同的道理。(注意要时不时mod p) 1 #include<bit 阅读全文
posted @ 2022-05-28 11:57 YHXo 阅读(28) 评论(0) 推荐(0) 编辑
摘要:两个操作,第一个打懒标记处理,第二个直接询问即可,线段树中每个节点存的是区间内所有元素之和。 1 //p3372 2 #include<bits/stdc++.h> 3 typedef long long ll; 4 using namespace std; 5 #define lson k<<1, 阅读全文
posted @ 2022-05-28 11:46 YHXo 阅读(31) 评论(0) 推荐(0) 编辑
摘要:容易想到的是用二叉堆来解决,切断一条蚯蚓,其他的都要加上一个值,不妨用一个表示偏移量的delta。 1.取出最大的x,x+=delta; 2.算出切断后的两个新长度,都减去delta和q; 3.delta+=q; 将其他长度都加上q不好实现,我们就把新的两条减去p,相对大小关系不变,最后还原即可。 阅读全文
posted @ 2022-05-27 22:03 YHXo 阅读(20) 评论(0) 推荐(0) 编辑
摘要:学了哈夫曼树这道题还是好想的,基本上和构造哈夫曼树的思路一样,但是题目要求最长si的最小值,所以用两个关键字的堆,第一关键字是把出现次数作为权值,第二关键字表示从该节点开始的最长长度,权值相同时,选择长度较小的合并。 1 #include<bits/stdc++.h> 2 using namespa 阅读全文
posted @ 2022-05-27 21:52 YHXo 阅读(65) 评论(0) 推荐(0) 编辑
摘要:首先我们需要特判只涂了一种颜色的情况: (1)k=1,此时答案就是1;(2)k>1,涂的这种颜色肯定不能是第一个,答案是k-1; 对于其他正常情况,我们对于每个颜色找到一个最小的矩形(这个矩形内包含这种颜色出现的所有位置),用二维差分处理(sum数组),最后统计。如果某位置sum>1,说明这个位置被 阅读全文
posted @ 2022-05-14 16:17 YHXo 阅读(48) 评论(0) 推荐(0) 编辑
摘要:用vector记录每个数出现的位置,对于要查询的X,要找他落在L~R的个数有几个,用lower_bound和upper_bound查找,相减就是答案。 1 #include<bits/stdc++.h> 2 using namespace std; 3 int read(){ 4 int x=0,f 阅读全文
posted @ 2022-05-14 15:00 YHXo 阅读(35) 评论(0) 推荐(0) 编辑
摘要:求满足题目要求的简单环,做出图中所有的点双,用vector存储点双中的边,如果该点双满足点数=边数,就是我们想要的,求边的异或和即可;如果该点双点数小于边数,说明有不只一个环覆盖,不满足题意。 1 #include<bits/stdc++.h> 2 using namespace std; 3 #d 阅读全文
posted @ 2022-05-13 21:33 YHXo 阅读(23) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示