首页 > 其他分享 >Sums on Segments

Sums on Segments

时间:2024-12-25 10:57:45浏览次数:2  
标签:前缀 后缀 Segments Sums 序列 最大

前言

赛时没打出来, 赛后没调出来, 感觉还是挺好的一道题, 记一下

思路

容易发现的是对于 \(a_i \in \{-1, 1\}\) 这样的情况, 我们是可以取到极值中间的所有值的, 因为你从极值的子段中, 取出前缀一定可覆盖到其他值

直观的理解就是每次对子段和的影响最多 \(\pm 1\) , 因此在取的过程中一定可以遍历到

所以我们把序列分成形如 \(A + x + B\) 的部分, 其中 \(A, B\) 的贡献可以用最大 / 最小子序列来求出, \(A + x, x + B\) 的部分可以直接求出

最大的问题是, 全序列合并上 \(x\) 如何做

首先你观察一下他是否仍然具有好的性质, 发现 \(x\) 其实破坏了一些性质, 但不多, 容易观察到的是, 对于包含了 \(x\) 的子段, 这个性质仍然成立

实现

框架

首先处理两个段
然后处理以 \(x\) 作为开头 / 结尾 的 前缀 / 后缀, 放入答案
最后处理合在一起的段

这里合在一起的段需要求包含某个数的最大子段和, 这个怎么做?
容易发现求出以 \(x\) 前一位作为结尾的前缀最大 / 最小, 以 \(x\) 后一位作为开头的后缀最大 / 最小即可

总结

需要具有好的分讨能力, 不逃避对 \(\rm{corner}\) 的思考

对于涉及到 \(1, -1\) 的问题, 善于通过 \(\Delta\) 和前缀后缀来解决

善于手动模拟样例

标签:前缀,后缀,Segments,Sums,序列,最大
From: https://www.cnblogs.com/YzaCsp/p/18629899

相关文章

  • 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)相交,当且仅当以下......
  • CF1741F-Multi-ColoredSegments
    https://www.luogu.com.cn/problem/CF1741Fhttps://codeforces.com/contest/1741/problem/F参考:https://www.luogu.com.cn/article/bb54tb8m考虑用线段树维护每个点被几条线段覆盖,然后按照颜色分类,每次做其中一类,把同类颜色从线段树中去掉,然后先区间求和看有没有重叠,再左端点往......
  • P1466 [USACO2.2] 集合 Subset Sums
    题目描述对于从\(1\simn\)的连续整数集合,能划分成两个子集合,且保证每个集合的数字和是相等的。举个例子,如果\(n=3\),对于\(\{1,2,3\}\)能划分成两个子集合,每个子集合的所有数字和是相等的:\(\{3\}\)和\(\{1,2\}\)是唯一一种分法(交换集合位置被认为是同一种划分方案,因此不......