Description

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

Input

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

Output

输出一行,表示答案。

Sample Input

5 13
10 9 5 -5 7

Sample Output

11

HINT

【数据范围】
N<=200000,M,a_i<=10^18

题解

题解:因为,mod的最大值是其后者,或者第一个,

然后贪心即可,set维护,n log n

 #include<cstring>
#include<cmath>
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<set> #define N 200007
#define ll long long
using namespace std;
inline ll read()
{
ll x=,f=;char ch=getchar();
while(ch<''||ch>''){if (ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=(x<<)+(x<<)+ch-'';ch=getchar();}
return x*f;
} ll n,m,ans;
ll a[N],sum[N];
set<ll>q; int main()
{
n=read(),m=read();
for (int i=;i<=n;i++)a[i]=(read()%m+m)%m;
for (int i=;i<=n;i++)(sum[i]=(sum[i-]+a[i])%m+m)%=m;
q.insert();
for (int i=;i<=n;i++)
{
ll t;
if (q.upper_bound(sum[i])==q.end()) t=*q.begin();
else t=*q.upper_bound(sum[i]);
ans=max(ans,((sum[i]-t)%m+m)%m);
q.insert(sum[i]);
}
printf("%lld",ans);
}

最新文章

  1. adb shell 查看系统属性(用来判断特殊的操作系统)
  2. jQuery 重新温习 遗忘知识点
  3. ios kaifa
  4. LeetCode【第一题】Two Sum
  5. 【2017-06-27】Js中获取地址栏参数、Js中字符串截取
  6. Druid源码阅读之连接池
  7. 【一天一道LeetCode】#38. Count and Say
  8. vba批量作图心得1
  9. Fastcgi工作原理
  10. JavaScrip相关知识总结
  11. &lt;转&gt;浅谈缓存击穿、缓存并发和缓存失效
  12. 使用github的感想
  13. MongoDB 进程控制系列二:结束进程
  14. vue中打印显示++的问题解决方案(做成类似同步的操作就行了)
  15. react-native ios打包 、设置图标 启动图片
  16. [Umbraco] DocumentType设计指南
  17. 输入一批考生的的准考证号码,如果是 15 位,表示输入正确,否则重新输入。然后判断这个人的考试类别(号码中如果是以奇数结尾则考试类别为“A 类”,否则为“B 类”),最后输出此准考证的前 5 位和后 4 位,其他位用“*”来代替。说明:使用 StringBuffer 类的相关方法完成实验内容。
  18. MySQL的IFNULL函数
  19. redux设计到源码 --- 美团点评技术团队(转)
  20. Selenium三种等待元素的方式及代码,需要特别注意implicitlyWait的用法

热门文章

  1. python_87_shelve模块
  2. java8关于LocalDate,Date
  3. linux - mysql 安装教程
  4. QQ 发送邮件
  5. ubuntu14.04搭建LAMP环境(nginx,php,mysql,linux)详解
  6. 服务器TIME_WAIT和CLOSE_WAIT分析和解决办法
  7. 【Linux命令】nohup和&amp;差异,查看进程和终止进程!
  8. 利用for循环和range输出9 * 9乘法口诀表
  9. LeetCode(166) Fraction to Recurring Decimal
  10. gdb调试时查看内存