DLUTOJ 1331 Maximum Sum
Time Limit: 1 Sec Memory Limit: 128 MB
Description
Input
Output
For every test case output the maximum value asked above in a newline.
Sample Input
Sample Output
HINT
Max Possible Sum taking Modulo 7 is 6 , and we can get 6 by adding first and second element of the array
Source
Solution:
$先预处理出数组在模M下的前缀和sum[ ].$
$枚举区间起点L,然后在sum[L+1, ..., n]上查找两个值:$
\[v_1=max\{sum[i]: sum[i] < sum[L]\}\]
\[v_2=max\{sum[i]: sum[i] \ge sum[L]\}\]
然后用
\[max(v_{1}-a[L]+M, v_{2}-a[L])\]
更新答案
Implementation:可以用map,也可以用multiset.
map版
忘了map自带lower_bound函数,而且只能用这个lower_bound,不能写成lower_bound(b, e, k)
#include <bits/stdc++.h>
using namespace std;
typedef long long LL; const int N(1e5+);
map<LL,int> mp;
int n;
LL m, a[N]; map<LL,int>::iterator it;
int main(){
int T;
for(scanf("%d", &T); T--; ){
scanf("%d%lld", &n, &m);
mp.clear();
for(int i=; i<=n; i++) scanf("%lld", a+i), a[i]+=a[i-], a[i]%=m, mp[a[i]]++;
mp[]++;
LL ans=;
for(int i=; i<n; i++){
mp[a[i]]--;
if(!mp[a[i]]) mp.erase(a[i]);
ans=max(ans, ((--mp.end())->first-a[i]+m)%m);
it=mp.lower_bound(a[i]);
if(it!=mp.begin())
ans=max(ans, (--it)->first-a[i]+m);
}
printf("%lld\n", ans);
}
return ;
}
multiset 版
#include <bits/stdc++.h>
using namespace std;
typedef long long LL; const int N(1e5+);
multiset<LL> ms;
int n;
LL m, a[N]; multiset<LL>::iterator it; int main(){
int T;
for(scanf("%d", &T); T--; ){
scanf("%d%lld", &n, &m);
ms.clear();
for(int i=; i<=n; i++) scanf("%lld", a+i), a[i]+=a[i-], a[i]%=m, ms.insert(a[i]);
ms.insert();
LL ans=;
for(int i=; i<n; i++){
it=ms.find(a[i]);
ms.erase(it);
ans=max(ans, (*--ms.end()-a[i]+m)%m);
it=ms.lower_bound(a[i]);
if(it!=ms.begin())
ans=max(ans, *--it-a[i]+m);
}
printf("%lld\n", ans);
}
return ;
}
写这道题主要是复习C++ STL。上面提到的查询也可以用划分树来写,不过麻烦了许多。BST又不会敲,sigh。。。。。
DLUTOJ 1331 Maximum Sum的更多相关文章
- POJ2479 Maximum sum[DP|最大子段和]
Maximum sum Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 39599 Accepted: 12370 Des ...
- ural 1146. Maximum Sum
1146. Maximum Sum Time limit: 0.5 secondMemory limit: 64 MB Given a 2-dimensional array of positive ...
- UVa 108 - Maximum Sum(最大连续子序列)
题目来源:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=3&pa ...
- 最大子矩阵和 URAL 1146 Maximum Sum
题目传送门 /* 最大子矩阵和:把二维降到一维,即把列压缩:然后看是否满足最大连续子序列: 好像之前做过,没印象了,看来做过的题目要经常看看:) */ #include <cstdio> ...
- URAL 1146 Maximum Sum(最大子矩阵的和 DP)
Maximum Sum 大意:给你一个n*n的矩阵,求最大的子矩阵的和是多少. 思路:最開始我想的是预处理矩阵,遍历子矩阵的端点,发现复杂度是O(n^4).就不知道该怎么办了.问了一下,是压缩矩阵,转 ...
- ural 1146. Maximum Sum(动态规划)
1146. Maximum Sum Time limit: 1.0 second Memory limit: 64 MB Given a 2-dimensional array of positive ...
- UVa 10827 - Maximum sum on a torus
题目大意:UVa 108 - Maximum Sum的加强版,求最大子矩阵和,不过矩阵是可以循环的,矩阵到结尾时可以循环到开头.开始听纠结的,想着难道要分情况讨论吗?!就去网上搜,看到可以通过补全进行 ...
- POJ 2479 Maximum sum 解题报告
Maximum sum Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 40596 Accepted: 12663 Des ...
- Find the Maximum sum
Given an array of n elements.Find the maximum sum when the array elements will be arranged in such w ...
随机推荐
- 关于eclipse入门开发c/c++文章推荐
1. 关于编译说明. http://www.ibm.com/developerworks/cn/linux/opensource/os-ecc/ 2. 关于快捷键与代码阅读 http://www.cn ...
- Android Activity的生命周期
一.为什么要了解Activity的生命周期 activity is directly affected by its association withother activities, its tas ...
- 页的lock
文件为什么要加锁? 页的操作为什么要加锁? http://linux.chinaunix.net/techdoc/system/2007/06/11/959844.shtml 上面一个页面有简单介绍什 ...
- usb驱动开发6之端点描述符
学到这里不容易,先说一段故事吧. 二兄弟住一大楼的第80层,某深夜回家忘看通知(内容今夜停电). 兄弟俩背着沉重的大背包,在楼底下商量一下,决定一鼓作气,爬楼梯回家.两人抖擞精神,开始爬楼.爬到20楼 ...
- 微软职位内部推荐-Sr. SW Engineer for Azure Networking
微软近期Open的职位: Senior SW Engineer The world is moving to cloud computing. Microsoft is betting Windows ...
- memcached工作原理与优化建议
申明,本文为转载文:http://my.oschina.net/liuxd/blog/63129 工作原理 基本概念:slab,page,chunk. slab,是一个逻辑概念.它是在启动memcac ...
- Java环境解析apk文件信息
概述:Java解析apk文件,获取apk文件里的包名,版本号,图标文件等; 功能:可以提供给windows和linux平台使用; 原理:利用aapt.exe或者aapt这些anroid平台解析apk文 ...
- Javascript系列: Google Chrome调试js代码(zz)
你 是怎么调试 JavaScript 程序的?最原始的方法是用 alert() 在页面上打印内容,稍微改进一点的方法是用 console.log() 在 JavaScript 控制台上输出内容.嗯~, ...
- 安装Ubuntu 16.04后要做的事
Ubuntu 16.04发布了,带来了很多新特性,同样也依然带着很多不习惯的东西,所以装完系统后还要进行一系列的优化. 1.删除libreoffice libreoffice虽然是开源的,但是Java ...
- IE firefox 兼容性整理
1.尽量用jquery操作. 2.jquery取值时要用准确的方法,attr(), val(), text(), html(). 例如: <span value="a"> ...