题目描述

给定一个长度为N的数组a和M,求一个区间[l,r],使得$(\sum\limits_{i=l}^{r}{a_i})\ mod\ M$的值最大,求出这个值,注意这里的mod是数学上的mod(即-x mod M = (-x mod M + M) mod M)

输入

第一行两个整数N,M。
第二行N个整数a_i。

输出

输出一行,表示答案。

样例输入

5 13
10 9 5 -5 7

样例输出

11


题解

前缀和+STL-set

先用前缀和把一段区间变为前缀相减的形式,然后问题就转化为求$min((sum_i-sum_j)\ mod\ M)(j<i)$。

由于运算是在模意义下的,因此$sum_j$应该是$sum_i$的后继,使用set维护。如果没有后继,那么$sum_i$本身就是最大的以i结尾的区间和。

统计一下答案即可。

#include <set>
#include <cstdio>
using namespace std;
typedef long long ll;
set<ll> s;
set<ll>::iterator it;
int main()
{int n , i;ll m , sum = 0 , x , ans = 0;scanf("%d%lld" , &n , &m);s.insert(0);for(i = 1 ; i <= n ; i ++ ){scanf("%lld" , &x) , x = (x % m + m) % m , sum = (sum + x) % m;it = s.upper_bound(sum);if(it != s.end()) ans = max(ans , sum - *it + m);else ans = max(ans , sum);s.insert(sum);}printf("%lld\n" , ans);return 0;
}

转载于:https://www.cnblogs.com/GXZlegend/p/7434646.html

【bzoj3544】[ONTAK2010]Creative Accounting 前缀和+STL-set相关推荐

  1. 51 nod 1624 取余最长路 思路:前缀和 + STL(set)二分查找

    题目: 写这题花了我一上午时间. 下面是本人(zhangjiuding)的思考过程: 首先想到的是三行,每一行一定要走到. 大概是这样一张图 每一行长度最少为1.即第一行(i -1) >= 1, ...

  2. AcWing 1913. 公平摄影(前缀和+STL)

    题目连接 https://www.acwing.com/problem/content/1915/ 思路 对于这个牛牛的位置和不同牛牛我们可以用一个pair存储,然后我们实际上要求的答案是 连续同种牛 ...

  3. 【算法学习笔记】57. 前缀树 字典序优化技巧 STL学习 SJTU OJ 1366 前缀匹配

    Description 给出一个总字符个数大小不超过1,000,000的字典(这个字典的单词顺序不为字典序)和不超过1000个长度不超过1000的前缀,输出字典中匹配该前缀,字典序为K_i的单词在字典 ...

  4. 计蒜客 A2232.程序设计:蒜厂年会-单调队列(双端队列(STL deque)实现)滑窗维护最小前缀和...

    程序设计:蒜厂年会 问答问题反馈 只看题面 16.79% 1000ms 262144K 在蒜厂年会上有一个抽奖,在一个环形的桌子上,有 nn 个纸团,每个纸团上写一个数字,表示你可以获得多少蒜币.但是 ...

  5. LeetCode 437. Path Sum III (STL map前缀和)

    找遍所有路径,特判以根为起点的串即可. 代码: /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNo ...

  6. STL源码剖析---deque

    一.deque的中控器       deque是连续空间(至少逻辑上看来如此),连续线性空间总令我们联想到array或vector.array无法成长,vector虽可成长,却只能向尾端成长,而且其所 ...

  7. STL源码剖析---list

    相较于vector的连续线性空间,list就显得复杂许多,它的好处是每次插入或删除一个元素,就配置或释放一个元素空间.因此,list对于空间的运用有绝对的精准,一点也不浪费.而且,对于任何位置的元素插 ...

  8. STL源码剖析 迭代器iterator的概念 和 traits编程技法

    iterator模式定义如下:提供一种方法,使之能够依序巡访某个 聚合物(容器)所含的各个元素,而又无需暴露该聚合物的内部表述方式. STL的中心思想在于:将数据容器(containers)和算法(a ...

  9. C++ STL学习笔记(5) Vector容器, array容器,deque容器

    动态增长的数组vector,当它放入的元素满了的时候,会自动的扩充内存,但是,在计算机中内存不能够实现原地扩充,因为在申请了一块固定大小的内存之后,这块内存不管有没有用完,他后面的内存都有可能别的内容 ...

最新文章

  1. git在公司内部的使用实践(转)
  2. Page.LoadTemplate的使用
  3. 【今晚7点半】:超低延迟下的实时合唱体验升级
  4. Spark ML - 聚类算法
  5. dhtmlxTree 10分钟做一个树
  6. access制作封装软件_用Access开发《社工服务管理系统》
  7. 技术公开课:SQL Server 高可用性解决方案概述(下)
  8. 网络营销教程—SEO 第五章 单面页最佳优化
  9. 属于自己的MES(二)必备的主数据
  10. tiny4412 串口驱动分析五 --- LDD3上TTY驱动程序源码
  11. c语言知识竞赛题库答案及,《C语言程序设计》复习题库.docx
  12. 企业API接口设计(token、timestamp、sign)之具体实现
  13. 浙大计算机基础知识试题及答案,14年浙大远程教育计算机基础4.电子表格Excel 2010知识题(高起专)作业题4答案...
  14. TFS使用指南——从服务器上获取最新的项目文件
  15. clover写入efi_Clover EFI Bootloader r5111 四叶草黑苹果引导程序下载
  16. 使用Md5加密算法对密码进行加密(工具类)
  17. LWN: lockless编程模式——relaxed access和partial memory barrier
  18. 免费mysql数据库_免费mysql空间,免费数据库,免费MYSQL云数据库申请 | 帮助信息-动天数据...
  19. Flink统计日志图片信息并降序排序
  20. Halcon创建文件夹

热门文章

  1. MVC6 (ASP.NET5) 自定义TagHelper
  2. 畅通工程,How Many Tables ACM第九天-图论
  3. 由 select * 引发的“惨案”
  4. 35丨基础篇:C10K和C1000K回顾
  5. s6-5 TCP 连接的建立
  6. S7 Linux用户管理及用户信息查询命令
  7. 10.27 sort
  8. win10安装java不见了,win10安装java以及java配置遇到的坑
  9. python 用户输入_Python中如何让用户输入内容
  10. php论坛怎么架设,论坛架设有诀窍 phpWind配置技巧三则