标签:Koro log 题解 Professor Mark bitset CF1705E 我们
CF1705E Mark and Professor Koro
解题思路
我们可以知道,这里面可能会发生连锁反应,每次我们加入一个数字,就可能会导致前面一整条“链”不断合并,最后成为一个数。
比如说,我们现在有 \(x,x+1,x+2,\dots,y\),我们再加入一个 \(x\),我们这一串数字就会消失,化为一个数 \(y+1\)。
这个过程是不是有点熟悉?没错就是二进制加法。消失的过程就是进位。
于是我们的答案就是 \(log(\sum\limits_{i=1}^n 2^{a_i})\)。
我们如何解决这个新的带修问题捏?显然需要数据结构。
官方题解里提到了两种解法,第一种是用 bitset,不过我没看懂(他代码里好像是手动实现bitset的,很恐怖)。
我比较推荐第二种,用线段树解决。我们需要进行的操作是找到一个连续的 “1” 的段,可以二分这个末位置,然后懒标记修改。删除操作就是找连续的 “0”,实际上是一样的。
时间复杂度 \(O(n \log^2 n)\),是完全没问题的。不过不太清楚官方题解里 \(O(n\log n)\)是怎么做到的。
代码
你猜猜为什么没有代码~
标签:Koro,log,题解,Professor,Mark,bitset,CF1705E,我们 来源: https://www.cnblogs.com/huayucaiji/p/CF1705E.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。