您好,欢迎来到画鸵萌宠网。
搜索
您的当前位置:首页2019牛客暑期多校训练营(第七场)E F H I

2019牛客暑期多校训练营(第七场)E F H I

来源:画鸵萌宠网

E Find the median

题意:每次往序列中增加连续的[l,r]的数,每加入一次就询问当前序列的中位数。

解法:此题没有要求在线,那么直接离线+线段树+二分就可以了。求出每个端点之后排序得到数组b,线段树每个叶子结点i存储的是区间[ b[i-1]+1,b[i] ]的系数(即当前序列有多少个[ b[i-1]+1,b[i] ])。修改时顺便维护当前总的数个数sum,然后处理询问就是直接在线段树上二分就可以了。

 

F Energy stones

 题意:有n个石头,每个石头有初始能量ei,每秒增长能量li,能量上限ci。有m次收割操作(t,si,ti)代表第t秒收割下标[si,ti]的石头能量,石头的能量被收割之后会变成0然后重新增长。问收割总能量。

解法:这题解法偏思维+数据结构。首先是收割一段下标的石头能量此只有一次询问,那么容易想到差分打标记的办法,对于一个收割(t,si,ti),我们在石头si打t的标记代表收割开始,在ti+1打-t的标记代表收割结束。然后我们石头从左往右扫,就容易得到每个石头的收割开始与结束标记。再进一步观察其实对于每个石头这些开始与结束标记就组成了一段段时间段,我们我们的问题就是怎么维护这些时间段以及计算这些时间段对答案的贡献。

方法是用Set+BIT的方式,用Set来保存时间点,用Bit来保存时间段长度(注意这句话非常重要)。那么每当扫到i点有插入或者删除标记的话,我们先在Set里查找这个时间点的位置,因为Set保存了所有的时间点,所以找到时间点的位置之后我们就能知道插入/删除这个时间点对时间段长度的影响,那么根据这些影响就更新Bit。那么时间段长度就得到实时更新,根据这些时间段我们就能算出该石头对答案的贡献。

一些具体细节:①在set插入/删除时间点有一番细节的操作,以插入为例,要分三种情况:插到set头,插到set尾,插到set中。这三种情况有不同操作要自己细细想。②Bit其实有两个Bit,bit1[i]记录时间段i的数值和,bit2[i]记录时间段i的个数。③怎么计算石头对答案贡献?分两种三种贡献,第一是初始能量,第二是不会增长到上限ci的贡献(就是时间段长度<=ci/li的时间段)这个贡献用Bit1算,第三是增长到了ci的贡献,这个贡献用Bit2算。

有一些东西比较难说情况,建议看代码理解:

 

H Pair

题意:给出A,B,C;问存在多少数字对<x,y> 满足 x€[1,A],y€[1,B],x&y>C||x^y<C 。

解法:这题是真的不会做,比赛的时候一直在想FFT什么的完全想偏了qwq。解法参考这位大佬的。

首先要想到是一道数位dp的题目,然后设计出正确的dp状态:dp[i][c1][c2][lim1][lim2]代表当前填到第i位(从高位开始填),c1为前i位满足条件一情况,c2为前i位满足条件二情况,且A是否limit,B是否limit。特别要提到的是c1/c2只要3中状态(-1,0,1),-1是代表不满足条件(高位不满足已经凉了低位不用看了),1是已经满足条件(高位满足了低位也无所谓随便填),0是未确定(未确定其实就是还没满足但不是肯定不满足,相当于凉了一般但是还得看后面发挥)。

然后就是数位dp的常规套路,枚举每一位填什么顺便计算方案数。

 

I Chessboard

 题意:给定n,m。求k*k的矩阵,1<=k<=n,矩阵内的每个元素都不小于m,且矩阵内不同行不同列的元素相加都为一个定值T,且T<=n。问这样的矩阵有多少种,MOD998244353

解法:比赛的时候想不到,只能看题解了:。

要加强组合数学的推理能力(qwq)。

 

转载于:https://www.cnblogs.com/clno1/p/11455720.html

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo8.com 版权所有 湘ICP备2023022238号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务