2017江苏省赛的E题,当时在场上看错了题目没做出来,现在补一下……

题目链接:http://202.197.224.59/OnlineJudge2/index.php/Problem/read/id/1264(注意在上面使用G++编译的话,请使用%I64d)

Time Limit : 3000 MS

Memory Limit : 65536 KB

Bobo has a integer sequence a1,a2,…,an of length n. Each time, he selects two ends 0≤l<r≤n and add ∑(i=l+1 to r)(ai) − C into a counter which is zero initially. He repeats the selection for at most m times.

If each end can be selected at most once (either as left or right)(所有端点只能使用一次), find out the maximum sum Bobo may have.

Input

The input contains zero or more test cases and is terminated by end-of-file. For each test case:

The first line contains three integers n, m, C. The second line contains n integers a1,a2,…,an.

  • 2≤n≤1e5
  • 1≤2m≤n+1
  • |ai|,C≤1e4
  • The sum of n does not exceed 1e6.

Output

For each test cases, output an integer which denotes the maximum.

Sample Input

4 1 1
-1 2 2 -1
4 2 1
-1 2 2 -1
4 2 2
-1 2 2 -1
4 2 10
-1 2 2 -1

Sample Output

3
4
2
0

题目思路:

既然是让我们求最大子序列和,首先想到的是O(n)的算法,所以最简单的思路是O(n)算出最大连续子序列和,然后标记掉两个用过的端点,再继续O(n)的算这时的最大连续子列和……

反复如此,直到某个时候,这个子序列和已经比C小了 或者 次数已经到达m次,就停止。

显然,这样的时间复杂度可以到达O(mn),明显是超时,显然,m次的查询很难再减少了,就考虑怎么降低寻找最大连续子列和的时间复杂度。

这时,可以考虑用前缀和保存整个数组,然后再对这个sum[0……n]进行排序(注意,此时的sum[i]有n+1个,因为 0 <= l < r <= n)

那么,我们每次想查询最大连续子列和,只需要,这个sum[0……n]数组的最后一个(sum[r])减去最前一个(sum[l]),不断地l++,r--即可……

这样的时间复杂度最坏大概是O(n)+O(nlgn)+O(m),就不会超时。

 #include<cstdio>
#include<algorithm>
#define MAXN 100000+5
using namespace std;
int n,m,c,cnt,sum[MAXN];
long long ans;
int main()
{
while(scanf("%d%d%d",&n,&m,&c)!=EOF)
{
sum[]=;
for(int i=;i<=n;i++)
{
scanf("%d",&cnt);
sum[i]=sum[i-]+cnt;
}
sort(sum,sum+n+);
ans=;cnt=;
for(int l=,r=n;l<r;l++,r--)
{
if(sum[r]-sum[l]-c>)
{
ans+=sum[r]-sum[l]-c;
cnt++;
}
if(cnt>=m || sum[r]-sum[l]-c<=) break;
}
printf("%I64d\n",ans);
}
}

其实,我们不难发现,前缀和也可以求出最大连续子列和,但是如果我们只要查询一次最大连续子列和,显然是遍历a[1……n]数组的O(n)的算法比较快,但如果我们要像上题那样,不断地求第二大、第三大……这样的,还是用前缀和维护数组比较快。

附上2017湘潭邀请赛暨2017江苏省赛(JSCPC)的题解:http://files.cnblogs.com/files/dilthey/xiangtan-2017-solution.pdf

比赛题目地址:http://202.197.224.59/OnlineJudge2/index.php/Contest/problems/contest_id/43

XTU 1264 - Partial Sum - [2017湘潭邀请赛E题(江苏省赛)]的更多相关文章

  1. XTU 1267 - Highway - [树的直径][2017湘潭邀请赛H题(江苏省赛)]

    这道题可能有毒……总之一会儿能过一会儿不能过的,搞的我很心烦…… 依然是上次2017江苏省赛的题目,之前期末考试结束了之后有想补一下这道题,当时比较懵逼不知道怎么做……看了题解也不是很懂……就只好放弃 ...

  2. XTU 1260 - Determinant - [2017湘潭邀请赛A题(江苏省赛)][高斯消元法][快速幂和逆元]

    是2017江苏省赛的第一题,当时在场上没做出来(废话,那个时候又不懂高斯消元怎么写……而且数论也学得一塌糊涂,现在回来补了) 省赛结束之后,题解pdf就出来了,一看题解,嗯……加一行再求逆矩阵从而得到 ...

  3. XTU 1261 - Roads - [最小割][2017湘潭邀请赛B题(江苏省赛)]

    之前在网上搜了一个下午没搜到这道题的题解,然后同时又对着叉姐写的两行字题解看了一个下午: 虽然基本上已经知道了这题的思路,但愣是因为自己代码实现起来太繁复,外加不确定正确性,没敢码…… 但是一道题肝了 ...

  4. 2017湘潭大学邀请赛E题(贪心)

    链接:https://www.icpc.camp/contests/4mYguiUR8k0GKE Partial Sum Input The input contains zero or more t ...

  5. 2017 湘潭邀请赛&JSCPC G&J

    训练的时候对G想了一个假算法..也有很大可能是写错了.. 下来一看别人的G 看起来很奇妙.. 开始把所有的左括号翻成右括号,然后cost*=-1 这样在优先队列中就是最优的 然后for每一段 如果前缀 ...

  6. 2017湘潭大学邀请赛G题(贪心+优先队列)

    参考博客:http://www.cnblogs.com/chendl111/p/6891770.html 题目链接:https://www.icpc.camp/contests/4mYguiUR8k0 ...

  7. 2018湘潭邀请赛C题(主席树+二分)

    题目地址:https://www.icpc.camp/contests/6CP5W4knRaIRgU 比赛的时候知道这题是用主席树+二分,可是当时没有学主席树,就连有模板都不敢套,因为代码实在是太长了 ...

  8. 2017湘潭大学邀请赛H题(树的直径)

    链接:https://www.icpc.camp/contests/4mYguiUR8k0GKE H. Highway The input contains zero or more test cas ...

  9. 2017-5-14 湘潭市赛 Partial Sum 给n个数,每次操作选择一个L,一个R,表示区间左右端点,该操作产生的贡献为[L+1,R]的和的绝对值-C。 0<=L<R<=n; 如果选过L,R这两个位置,那么以后选择的L,R都不可以再选择这两个位置。最多操作m次,求可以获得的 最大贡献和。

    Partial Sum Accepted : Submit : Time Limit : MS Memory Limit : KB Partial Sum Bobo has a integer seq ...

随机推荐

  1. UINavigationController popToViewController用法

    popToViewController用法  [self.navigationController popToViewController:[self.navigationController.vie ...

  2. Nexus5 电信3G保留数据和Root升级Android 6.0

    前提: A 备份手机重要数据,安全第一 B 进入twrp recovery 备份EFS,建议最好拷贝到电脑上(如果没有twrp,则需要先刷twrp,具体指令请看下面步骤第10条) C 因为Androi ...

  3. SpringMVC由浅入深day02_9RESTful支持

    9 RESTful支持 9.1 什么是RESTful RESTful架构,就是目前最流行的一种互联网软件架构.它结构清晰.符合标准.易于理解.扩展方便,所以正得到越来越多网站的采用. RESTful( ...

  4. 高德地图api比例尺

    20-10m-(19=<zoom<20) 19-10m-(19=<zoom<20) 18-25m-(18=<zoom<19) 17-50m-(17=<zoom ...

  5. 递归的几个demo

    /** * Created by root * Description : 递归函数 */ object RecursionTest { def main(args: Array[String]): ...

  6. iOS开发-UIImageView的contentMode属性

    UIImageView 的contentMode这个属性是用来设置图片的显示方式,如居中.居右,是否缩放等,有以下几个常量可供设定:UIViewContentModeScaleToFillUIView ...

  7. HttpClient(四)-- 使用代理IP 和 超时设置

    1.代理IP的用处: 在爬取网页的时候,有的目标站点有反爬虫机制,对于频繁访问站点以及规则性访问站点的行为,会采集屏蔽IP措施.这时候,就可以使用代理IP,屏蔽一个就换一个IP. 2.代理IP分类: ...

  8. DDMS调试信息

    1.可以使用System.out.println() 2.android.util包下的Log类 该类可以将信息以日志的形式输出到LogCat中: import android.util.Log; S ...

  9. 使用jquery的 $.grep实现es6的filter效果

    现在es6是趋势,习惯了es6会方便的多,但是有时候由于项目的限制,会限制es6的使用,在处理数组的时候,往往会想将一个数组进行过滤产生另一个新数组,如es6的filter 如下,我又一个数组,[1, ...

  10. iOS9下App Store新应用提审攻略

    博文转载 CocoaChina 文/文公子 公子在第十讲中提到应用更新时需要注意的细节和苹果便捷通道的利用.今天,公子将进一步深扒iTunes Connect的面纱,为大家呈现新应用在提审前需要准备的 ...