三体系列NOIP模拟赛----执剑人

这道题又是超级贪心优化线段树之类的东西

代码没有存,,,就讲一下思路

首先是60分的贪心算法

考虑这样一个贪心:

先从左往右扫,如果某一时刻不满足要求,则需要删除前面中某一个支持对方的人。我们贪心地选择删除当前时刻访问的人(肯定是支持对方),然后继续往后扫。

然后再从右往左扫,作相同的操作。

直观地理解是这样的:我们尽量删除靠右的人,使得从右往左扫时少删除一些人。

可以采用交换论证法证明这贪心是对的。

利用这个贪心的思路

思考线段树的优化做法

首先我们可以发现从左往右扫完,从右往左扫的这个过程可以不用实现出来。只需要求出右端点开始的最小后缀和的相反数即可。

然后我们发现,如果两个询问区间拥有相同的左端点,则只需要作一次从左往右扫的工作。这使我们想到要离线化解决问题。

我们将询问按左端点排序,按照左端点从大到小的顺序求解询问。

如果已知从 i 开始向右扫需要删除那些结点,则从 i-1 开始向右扫需要删除那些结点可以快速求出。具体来说,如果i-1是支持者,则左数第一个被删除的结点与它抵消;如果i-1是反对者,则加入被删除的结点里。

该过程可以用栈维护。

²通过在栈里面二分,我们可以知道区间[l, r]在从左往右扫时需要删除的结点数量。

²现在问题就是求解以 r 为端点的最小后缀和。

²这个东西可以用块状数组O(sqrt(N))维护(这就是80%算法的由来),更好的方法应该是用线段树O(log(N))维护

²于是该题就在O((N+Q)logN)的时间复杂度内解决了。

代码我也是写的很辛苦的

可惜忘了存,因为忘了将查询的与0取max而改了好久

希望各位不要重蹈覆辙

转载于:https://www.cnblogs.com/ENESAMA/p/10110023.html

1、打开已有的一组三体配置文件(.tbc)并运行(点击播放按钮)。 "File"菜单下有导入(Import)、导出(Export)功能,在不能上传附件时方便以纯文本方式交流自己搜索出来的三体配置! 2、手工设定初始条件的全部数值(点击魔术棍按钮)。分别指定三个物体的初始条件(X、Y、Z坐标,质量,初始速度的幅度、在XY平面上的角度0~360、在XZ平面上的角度0~360)。四个圆形选项(Radio Button)是参照系选择:默认的"Normalize to Centroid"是按三体系统质心作为参照系进行速度平衡,相当于观察者总是跟随三体的质心运动。另外三个选项分别是以第一、二、三个天体作为参照系,即总是把这个天体放在中心位置从不移动--注意这是非惯性参照系!(一般应选取行星主要围绕的那个恒星,方便观察行星轨道) 如果XZ平面上的初始速度角度都是0,则退化为二维的三体。 不过手工设定的条件通常都很难稳定运行。 3、设定搜索条件,让软件自动搜索。搜索分为两步: 3.1、搜索稳定的三体解(点击望远镜按钮) 第一部分是每个物体的约束条件:坐标最大值、最小质量、最大质量、最小速度幅度、最大速度幅度。 第二部分是是否要求三体在最初N步里超出一个边长为M的方框范围。这样看起来比较有趣,但搜索起来可能很慢。 第三部分是三体必须在N步里不超出一个边长为M的方框范围。否则它们很快发散就不好玩了。 然后那个复选框是:是否只进行二维搜索。 搜索结束后会出现一组初始条件值,点OK就开始运行了。 3.2、在三体解的基础上,搜索稳定的行星解(点击右下有小球的望远镜按钮) 手工设定或者自动搜索出来的解,如果喜欢的话,可以存盘,也可以导出为纯文本贴在论坛上与大家共享。压缩包里的.tbc也是偶自己用这个软件搜出来的。 四个播放按钮: 第一个播放形状的,是开始或者继续运行; 第二个暂停形状的,是暂停; 第三个短箭头,是减速运行; 第三个双箭头,是加速运行。 速度有很多档次,从减速6倍到加速运行100倍,直到加速100倍跳3125帧(相当于加倍312500倍,但每隔3125帧才显示一帧,所以看起来很不连续),每5倍为一个档次。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值