首页 > 其他分享 >20240706总结(线段树应用)

20240706总结(线段树应用)

时间:2024-07-08 14:19:44浏览次数:12  
标签:总结 20240706 题解 线段 rd 扫描线 区间 模板

A - Physical Education Lessons

CF915E Physical Education Lessons
题解:没什么好说的,动态开点模板题(好像普通线段树也可以做)

B - GCD of an Array

CF1493D GCD of an Array
题解:暴力分解质因数,修改的时候也把x分解,对每个质数开一个可重集合(multiset)记录一下每个质数出现的不同位置的个数,如果个数是n就计算答案,修改multiset。

C - Omkar and Medians

CF1536D Omkar and Medians
题解:新加一个数中位数只可能移动一位,所以如果前面一个数在后面两个数之间就一定无解。

D - Xor-Set

CF1261F Xor-Set
题解:首先可以把每个区间拆成若干个\([x,x+2^i)\),为什么呢?因为可以用线段树维护。

不难发现一段\([x,x+2^i)\)区间里的数二进制前一段都是一样的,后一段是全排列,而且i越大后一段越长。

如果两个区间\([x,x+2^i)\)和\([y,y+2^j)\)其中i>j,那么后i位是全排列,而前面是确定的。

在树上总能找到\([y,y+2^j)\)的父亲\([y,y+2^i)\),我们发现用\([y,y+2^i)\)代替\([y,y+2^j)\)结果是不变的,也就是只需要考虑同样长度(即深度一样)的区间。

就用线段树来实现即可,dfs的过程中记录当前高位的异或值,当有区间被完全覆盖后就返回。

E - 扫描线

P5490 【模板】扫描线
题解:扫描线模板

F - Parade

CF35E Parade
题解:发现轮廓线顶点只有在高度变化的时候才会出现,直接动态开点维护高度

H - Number of Groups

CF1691E Number of Groups
题解:下文把蓝色简称为b,红色简称rd。左端点为l,右端点为r。

发现两朵云要想连起来的充要条件是:r[b]>=l[rd]并且l[b]<=r[rd]。有两个条件不好做,考虑通过排序去掉一个。

先将b按照r从小到大排序,rd按照l从大到小排序,那么枚举rd的时候一旦有r[b]>=l[rd],这个b就对于后面的所有rd都满足这个条件。我们只用考虑l[b]<=r[rd]这个条件。只用把满足前一个条件的b丢到优先队列里就好判断了。这一个rd判断完以后如果合并了b,把其中一个最小的l[b]丢回去。

I - T-shirt buying

CF799B T-shirt buying
题解:开三个set,对于每个询问找对应的两个集合里最小的价格,然后把它从所有集合里删去。

J - Equalize the Remainders

CF999D Equalize the Remainders
题解:贪心,用set记录每一个余数的个数,循环余数,记录下一个少了的位置。

标签:总结,20240706,题解,线段,rd,扫描线,区间,模板
From: https://www.cnblogs.com/wangwenhan/p/18289798

相关文章

  • vue3管理系统常用代码总结
    管理系统常用基本模块,可满足大部分管理系统的基础模块需求。技术选型vue3+typescript1.登录功能//登录construleFormRef=ref<FormInstance>();constrouter=useRouter()//-->$routerconstsubmitForm=(formEl:FormInstance|undefi......
  • C++异常处理算法总结
    一、背景        C++的异常处理机制是用来处理程序运行过程中出现的异常情况的。异常处理可以帮助程序应对错误,避免程序崩溃,并且可以提供有意义的错误信息。下面是C++异常处理的关键概念和常用模式的总结。二、异常处理1.异常处理的基本机制        C++......
  • 7.7每周总结
    小学期周总结姓名:董泽豪学号:20223775一、学习情况周一-Hadoop学习今天我学习了Hadoop的基本概念和架构。了解了Hadoop是如何通过分布式计算来处理大数据的。通过阅读教材和观看相关视频教程,我对Hadoop的工作原理有了初步的理解。周二-MapReduce学习我深入学习了MapRedu......
  • 2024暑假重庆训练记+总结
    Day-1明天就要去重庆了今天上午有一场模拟赛有点难(sohard)改题什么的留给重庆的我吧..今天自然要放松回家之后简简单单地吃了一碗面然后回家和同学们聊天晚上也是和另一个同学聊天但是她的手机坏了所以就不聊了额(挺不巧的)然后很早就睡觉了卷王\(lhy\)还在喝咖......
  • 2024暑假第一周总结
    JAVA开发环境搭建和HelloWorld编译1、JDK安装(java开发环境安装)更改环境变量Path环境变量Path环境变量用于记住程序路径,方面在命令行窗口的任意目录启动程序老版本的jdk需要进行配置环境变量,将jdk和bin包路径复制,新建path路径Java_home环境变量告诉操作系统JDK安装在了哪个......
  • 震惊!Linux 常用命令总结,不看必定后悔!!!
    Linux是一个强大的操作系统,拥有大量的命令行工具。以下是一些常用的Linux命令及其基本用法:ls -列出目录内容。ls:列出当前目录下的文件和文件夹。ls-l:以长格式列出详细信息,包括权限、所有者、大小等。ls-a:列出所有文件,包括隐藏文件。cd -改变当前目录。cd/path/......
  • CSS基础知识总结(4)
    1、使用CSS绘制一些简单的图形。A:正方形#square{width:100px;height:100px;background-color:red;}B:圆形1#square{2width:100px;3height:100px;4border......
  • lock_guard和unique_lock学习总结
    1.std::lock_guardstd::lock_guard其实就是简单的RAII(ResourceAcquisitionIsInitialization)封装,资源获取即初始化。在构造函数中进行加锁,析构函数中进行解锁,这样可以保证函数退出时,锁一定被释放。 不可以对std::lock_guard调用unlock进行解锁操作。std::lock_guard是一......
  • 实习总结 --- 资源位业务
    测试范围测试风险端风险与服务端风险—预防措施:注重埋点规范、使用自动化提效、进行配置检查、做好监控建设。资源位投放方式方式一:通过麦哲伦平台投放,麦哲伦1.0和2.0均在使用中方式二:组件化的方式投放。组件化是指将资源位的投放能力以组件的方式嵌入到其他业务的系......
  • 第一周总结(2024.7.6)
     这周是上小学期的第一周,内容是数据结构,第一阶段是布置在pta上的程序,包括一个图的应用和一个排序算法,剩下的两个编程自选。图论的部分我选的是迪杰斯特拉算法的应用,排序选的是希尔排序,我通过这个小学期的第一阶段复习了数据结构的算法并应用更加熟练。 在过去的一周我安装了h......