数据结构
文章平均质量分 57
数据结构
呃呃...
这个作者很懒,什么都没留下…
展开
-
Deltix Round, Summer 2021 (open for everyone, rated, Div. 1 + Div. 2) E(st表+思维)
题目大意: 有两个长度为nnn的序列aaa和bbb,qqq次询问,每次询问一个区间[l,r][l,r][l,r],对于区间执行以下操作: 选择l≤pos1≤pos2≤...≤posk≤r(k为偶数)l \le pos_1 \le pos_2 \le ... \le pos_k \le r (k为偶数)l≤pos1≤pos2≤...≤posk≤r(k为偶数),对于aaa序列pos1,pos3,pos5,...pos_1,pos_3,pos_5,...pos1,pos3,pos5,...加1,对于原创 2021-09-01 09:33:14 · 59 阅读 · 0 评论 -
490F - Treeland Tour 树上最长上升子序列
题目大意: 求树上的最长上升子序列 解题思路: 可以用权值线段树合并来操作,每个点分别存储以该值结束的最长上升子序列以及以该值开始的最长上升子序列,最后合并即可 似乎还可以动态规划以及树上启发式合并来做 AC代码: #include <bits/stdc++.h> #define ft first #define sd second #define IOS ios::sync_with_stdio(false), cin.tie(0), cout.tie(0) #define seteps(原创 2021-08-23 13:24:15 · 234 阅读 · 0 评论 -
2021牛客暑期多校训练营10 Browser Games (字典树)
题目大意: 有n≤1e5n\le1e5n≤1e5个字符串,每天依次发表一个字符串,要求找出最少的前缀使得已经发表的字符串的前缀都能可以被表示,而那些“未发表”的字符串不能够被表示(题目保证了不会出现某个在前面的字符串是另一个在后面的字符串的前缀) 空间要求不超过32M 解题思路: 这题如果没有空间要求就是一道非常裸的字典树,将每个串对应字典 树上的节点标为黑点,每次操作会将一个黑点变为白点,目标是将尽可能少的非根节点标红使得任意一个白点到根的路径上都有被标红的节点,且任意一个黑点到根的路径上都没有被标红的原创 2021-08-21 15:38:06 · 445 阅读 · 0 评论 -
2021牛客暑期多校训练营1 J(线段树)
题目大意: AC代码 #include <bits/stdc++.h> #define endl "\n" using namespace std; const int maxn = 1e6 + 10; typedef long long ll; const ll inf = 0x3f3f3f3f; struct Trip { ll umax, vmin; bool ok; } tree[maxn << 2]; ll lazy[maxn << 2]; in原创 2021-07-18 21:17:00 · 110 阅读 · 0 评论 -
Codeforces Round #722 (Div. 1)_C(贪心+树状数组)
Codeforces Round #722 (Div. 1) 题目大意: 有两棵根节点都为1的树tree1和tree2,询问最多有几个点满足以下条件: 这几个点在tree1的1~x的一条链上 任意两个点在tree2都不互为公共祖先 解题思路: 题目的输入保证了某一结点u的祖先的编号一定比u小 所以我们对一颗树dfs,1~x时出现有x的祖先y所覆盖的子树与x的覆盖子树出现冲突时,那么显然选取x覆盖的子树(小)比选取y覆盖的子树(大)更加优秀 所以思路非常显然了,对tree2求出每个节点覆盖的区间(dfs原创 2021-06-04 13:48:07 · 112 阅读 · 0 评论 -
2018_icpc_jiaozuo_H(后缀数组+单调栈)
H. Can You Solve the Harder Problem? 题目大意: 长度为n(≤2e5\le 2e5≤2e5)的序列,求每个不同字串的最大值的总和。 解题思路: 不同子串其实非常容易联想到后缀数组(可是我没想到…) 暴力遍历后缀: 到这里暴力遍历每个后缀《可 以》得到答案,注意,对于每个后缀,固定了左端点,右端点要从它与上一名(后缀数组排序的名次)的最长公共前缀的下一个位置开始遍历,这样才不会重复计算 但是这样子时间复杂度最坏为:O(n2)O(n^2)O(n2)仍然会超时,所以考虑怎原创 2021-05-26 12:19:11 · 107 阅读 · 0 评论 -
CF712E Memory and Casinos(期望+线段树)
题目大意: (图片翻译来源于:洛谷) 解题思路: 最后的最后还是看了CF的官方题解… L[l,r]L[l, r]L[l,r]代表从lll离开区间的概率 R[l,r]R[l,r]R[l,r]代表从rrr离开区间的概率 设l1=L[l,i],l2=L[i+1,r],lef=L[l,r]l1=L[l,i],l2=L[i+1,r],lef=L[l,r]l1=L[l,i],l2=L[i+1,r],lef=L[l,r] 设r1=R[l,i],r2=[i+1,r],rig=R[l,r]r1=R[l,i],r2原创 2020-06-22 09:34:54 · 127 阅读 · 0 评论 -
Codeforces Round #576 (Div. 2) C(尺缩法),D(线段树)题解
C. MP3 题目大意: 有nnn个数,可以选定l<=rl<=rl<=r,使nnn个数中小于lll的数都变成lll,大于rrr的数变成rrr,经过该操作后N个数中不同的个数为K,问最少改变的个数是多少,使k=⌈log2K⌉k=⌈log2K⌉k=⌈log2K⌉,k∗n<=8∗Ik*n<=8*Ik∗n<=8∗I 解题思路: 首先将n个数排序 将每个数出现的次数用num[tot]num[tot]num[tot]记录下来 计算最大的kkk是多少,从而计算KKK 在num[]原创 2020-05-11 17:21:17 · 117 阅读 · 0 评论