首页 > 其他分享 >CF2043C Sums on Segments

CF2043C Sums on Segments

时间:2024-12-27 15:00:08浏览次数:3  
标签:一步 子段 max Segments min Sums bigcap CF2043C 可以

注意到,要求一个值域是 \(\{1,-1\}\) 的序列的子段和有多少种不同的取值,实际上就是求它的最小子段和 \(a\) 到最大子段和 \(b\) 之间有多少个整数。因为可以证明,每个处于 \([a,b]\bigcap Z\) 中的数,都至少有一个子段与之对应——要得到和为 \(b-1\) 的子段,只需要从最大子段的一端删去一个和为 \(1\) 的子段即可(一定可以做到),进而可以一步一步得到 \(b-2,b-3,\cdots 1,0\);相似的,从最小子段和可以一步一步得到 \(a+1,a+2,\cdots -1,0\)。

有了上述结论,我们可以对特殊值 \(x\) 左右两边的只含 \(1,-1\) 的段 dp 求最大子段和 \(\max\)、最小子段和 \(\min\),把 \([\min,\max]\bigcap Z\) 中的数全部加入 set。对于含 \(x\) 的区间,可以求出左段的最大后缀和 \(\max_1\) 和最小后缀和 \(\min_1\),以及右段的 \(\max_2,\min_2\),取值范围就是 \([\min_1+\min_2+x, \max_1+\max_2+x]\bigcap Z\),同样加入 set。遍历的值域不超过 \(n\),复杂度 \(O(n\log n)\);也可以用线段树优化到 \(O(\log n)\)。AC代码

标签:一步,子段,max,Segments,min,Sums,bigcap,CF2043C,可以
From: https://www.cnblogs.com/th19/p/18635798

相关文章

  • CF2043C 题解
    CF2043C题解题意给定一个除了\(-1,1\)之外,最多存在一个\(x,x\in[-10^9,10^9]\)的数的序列,求其子段和的所有可能值,从小到大输出。分析很容易就去思考如何从这个特殊的\(x\)入手。于是先排除这个特例,考虑全都是\(1,-1\)的情形,那么顺序从左到右不断加入\(a_i\),可以发现......
  • Sums on Segments
    前言赛时没打出来,赛后没调出来,感觉还是挺好的一道题,记一下思路容易发现的是对于\(a_i\in\{-1,1\}\)这样的情况,我们是可以取到极值中间的所有值的,因为你从极值的子段中,取出前缀一定可覆盖到其他值直观的理解就是每次对子段和的影响最多\(\pm1\),因此在取......
  • P8060 [POI2003] Sums 题解
    题目传送门前置知识同余最短路解法考虑同余最短路,设\(dis_{i}\)表示\(\bmoda_{1}=i\)时能被拼成的最小值,接着只需要判断是否有\(dis_{b\bmoda_{1}}\leb\)即可。直接建边的空间复杂度为\(O(nV)\),无法接受。但我们发现边不一定非要建出来,可以在Dijsktra松弛时枚......
  • [USACO24OPEN] Grass Segments G 题解
    考虑对于一个区间\([l_i,r_i]\),最少重叠长度为\(k_i\),怎样的区间\([l_j,r_j]\)可以与前者产生贡献;首先\(r_j-l_j\gek_i\),在满足这个条件的情况下需要有\(r_j\gel_i+k_i\landl_j\ler_i-k_i\),这里\(\land\)表示合取,即C++中的\(\mathrm{and}\)。正难则反,考虑用长度\(......
  • 【二分+前缀和+后缀和】codeforces 2026 D. Sums of Segments
    题目https://codeforces.com/problemset/problem/2026/D题意第一行输入一个正整数\(n(1\leqn\leq3e5)\),第二行输入\(n\)个整数\(a_1,a_2,...,a_i,...,a_n(-10\leqa_i\leq10)\),第三行输入一个正整数\(q(1\leqq\leq3e5)\),随后\(q\)行,每行输入两个整数\(......
  • CF1389F Bicolored Segments
    CF1389FBicoloredSegments题目大意:给你\(n\)条线段\([l_1,r_1],[l_2,r_2],\ldots,[l_n,r_n]\)。线段有两种颜色,第\(i\)条线段的颜色为\(t_i\)。我们称一对线段\(i,j\)是不好的,当且仅当以下两个条件同时满足:\(t_i\neqt_j\);线段\([l_i,r_i]\)和\([l_j,......
  • 20AB-day3 Good Subsegments
    20AB-day3GoodSubsegments题意给你一个长度为\(n\)的序列\(a\),问有多少个子区间,满足\(\sum_{i=l}^r2^{a_i}=2^x\),其中\(x\)为非负整数。原题解第一个想法:若\(2^{a_l}+2^{a_{l+1}}+\cdots+2^{a_r}=2^x\),则\(x\le\max(a_l,a_{l+1},\cdots,a_r)+\logn\)。第二......
  • CF2018E2 Complex Segments (Hard Version) 题解
    题目描述\(T\)组数据,给定\(n\)条线段\([l_i,r_i]\),称一个线段集合是复杂的,当且仅当:它可以被划分成若干个大小相等的线段组。两条线段相交当且仅当它们在同一组。求用这\(n\)条线段构成的复杂线段集合的最大值。数据范围\(1\len,\sumn\le3\cdot10^5\)。\(1\l......
  • nvm下载node版本Could not retrieve https://nodejs.org/dist/latest/SHASUMS256.txt.
    1.使用nvm安装node版本的时候报错Couldnotretrievehttps://nodejs.org/dist/latest/SHASUMS256.txt.Get"https://nodejs.org/dist/latest/SHASUMS256.txt":dialtcp104.20.22.46:443:i/otimeout原因:可能是远程连接被关闭的问题,这是由于国内网络限制导致的,解决办法:找到sett......
  • C++ 如何检查两个给定的线段是否相交(How to check if two given line segments inters
    给定两条线段(p1,q1)和(p2,q2),判断给定的线段是否相交。在讨论解决方案之前,让我们先定义方向的概念。平面中有序点三元组的方向可以是 –逆时针 –顺时针 –共线 下图显示了(a,b,c)的不同可能方向 方向在这里有什么用处? 两条线段(p1,q1)和(p2,q2)相交,当且仅当以下......