首页 > 其他分享 >【刷题记录】20231124 线段树分治

【刷题记录】20231124 线段树分治

时间:2023-11-24 20:36:30浏览次数:41  
标签:空栈 20231124 线段 元素 消掉 即可 从小到大 刷题

做题记录:

image

注意到每次相当于 \(0\) 后面加 \(1\),\(1\) 后面加 \(0\),因此每次可以合并 01 和 10 然后将问题规模减半。

image

黑白染色,白格子=lcm+1,黑格子=prime相乘。发现横着竖着有六个质数,斜着只用四个质数。调整一下顺序即可。

image

状压DP。考虑S作为前缀max时S与U-S的排列方案数。S每一个真后缀都非负,U-S的每一个前缀都为负。然后f[S]表示S从后往前加数的合法方案数,g[S]表示从前往后加数的合法方案数,DP即可。再注意真后缀非负sum[S]可以为负,处理f[S,0/1]表示sum[S]<0或sum[S]$\ge$0。

image

喵喵题。相当于求出一个导出子图使得度数最小的点deg尽可能大;再求一个尽可能大的独立集。

第一问很好做,从小到大枚举答案然后删点即可;第二问有随机化做法,也可以按度数从小到大贪心取点,可以证明这样满足条件。

image

喵喵题。当空栈被用的时候,假设用空栈的元素是u。下一个出现的不是栈顶的元素为v。

  • 当u=v时,u放在空栈和v消掉;
  • 当v是栈底元素时,其栈顶设为w,
    • 若w出现奇数次,u放在空栈,奇数次之后w消掉,v消掉,产生新的空栈;
    • 若w出现偶数次,u放在w上,w放在空栈消掉,之后v通过栈底消掉。

image

往前推就完事了。

image

一眼题,能买就买,买不了替换前面的去。

image

题解都很垃圾。枚举次大值然后用可持久化Trie。用链表搞,按值从小到大删元素,即可得到左右边比他大的第二个数。或者用线段树维护次大值也可以做的。很容易假,尤其是使用单调栈。

image

image

image

image

image

image

image

image

image

标签:空栈,20231124,线段,元素,消掉,即可,从小到大,刷题
From: https://www.cnblogs.com/Mars-LG/p/17854702.html

相关文章

  • 每日总结20231124
    代码时间(包括上课)5h代码量(行):100行博客数量(篇):1篇相关事项:1、今天是周五,今天上午进行了软件需求分析课上的有关于大数据竞赛的题目的考试,也很顺利的写完了。2、今天下午洗了洗衣服,刷会抖音,睡了一觉,好好休息了一下午。3、今天晚上打算继续完成人机交互的作业。......
  • MySQL将'20231124'转换为'yyyy/MM/dd'格式
    可以使用STR_TO_DATE函数将一个字符串转换为日期,并使用DATE_FORMAT函数将日期格式化为指定的格式SELECTDATE_FORMAT(STR_TO_DATE('20231124','%Y%m%d'),'%Y/%m/%d');解释一下上述语句的步骤:STR_TO_DATE('20231124','%Y%m%d')将字符串"20231124"转换为日期......
  • 交点 - 求两线段交点2
    效果 会用到的知识相交-两线段是否相交-yanghui01-博客园(cnblogs.com)线性代数-已知点求直线方程-yanghui01-博客园(cnblogs.com)交点-两直线交点-yanghui01-博客园(cnblogs.com) //两线段是否相交publicstaticboolIsTwoSegmentIntersect2(V......
  • 「线段树」笔记
    基础建树voidbuild(intp,intl,intr){ t[p]=(tree){l,r,0}; if(l==r) { t[p].sum=val[l]; return; } intmid=(l+r)>>1; build(lp,l,mid); build(rp,mid+1,r); pushup(p);}单点修改(和)voidupdate(intp,intx,intk){ if(t[......
  • 【模板】可持久化线段树 2
    【模板】可持久化线段树2题目背景这是个非常经典的可持久化权值线段树入门题——静态区间第$k$小。数据已经过加强,请使用可持久化权值线段树。同时请注意常数优化。题目描述如题,给定$n$个整数构成的序列$a$,将对于指定的闭区间$[l,r]$查询其区间内的第$k$小值。输......
  • 力扣刷题随笔
    力扣刷题随笔回文链表给你一个单链表的头节点head,请你判断该链表是否为回文链表。如果是,返回true;否则,返回false输入:head=[1,2,2,1]输出:true输入:head=[1,2]输出:false链表中节点数目在范围[1,105]内0<=Node.val<=9本题的思路就是利用双指针的方法来比......
  • 刷题记录
    P3605[USACO17JAN]PromotionCountingP:dfs序+主席树。明明权值树状数组就可以了,还差点加上了全部的树链剖分操作……写复杂树写魔怔了。巧妙的点在于对dfs序的应用。......
  • loj144&145 dfs序+树状数组/线段树
    https://loj.ac/p/144https://loj.ac/p/145两题非常相似,一题的权值修改是在点上的,一题的权值修改是在整棵子树上的。首先我们要了解dfs序,并记录每个节点的子树大小sz,对于一个节点,在dfs序上sz长的区间全都是他的子节点以及他自己。所以我们将一棵树映射到了一个区间上,并且可......
  • 【刷题笔记】115. Distinct Subsequences
    题目Giventwostrings s and t,return thenumberofdistinctsubsequencesof s whichequals t.Astring's subsequence isanewstringformedfromtheoriginalstringbydeletingsome(canbenone)ofthecharacterswithoutdisturbingtheremainingch......
  • 【模板】线段树1(洛谷P3372)
    1#include<iostream>2#include<cstdio>34usingnamespacestd;56template<classT>7inlinevoidread(T&s)8{9s=0;10intw=1;11charch=getchar();12while(ch<'0�......