bzoj 3544 [ONTAK2010]Creative Accounting 贪心
2024-08-27 10:42:36
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
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);
}
最新文章
- adb shell 查看系统属性(用来判断特殊的操作系统)
- jQuery 重新温习 遗忘知识点
- ios kaifa
- LeetCode【第一题】Two Sum
- 【2017-06-27】Js中获取地址栏参数、Js中字符串截取
- Druid源码阅读之连接池
- 【一天一道LeetCode】#38. Count and Say
- vba批量作图心得1
- Fastcgi工作原理
- JavaScrip相关知识总结
- <;转>;浅谈缓存击穿、缓存并发和缓存失效
- 使用github的感想
- MongoDB 进程控制系列二:结束进程
- vue中打印显示++的问题解决方案(做成类似同步的操作就行了)
- react-native ios打包 、设置图标 启动图片
- [Umbraco] DocumentType设计指南
- 输入一批考生的的准考证号码,如果是 15 位,表示输入正确,否则重新输入。然后判断这个人的考试类别(号码中如果是以奇数结尾则考试类别为“A 类”,否则为“B 类”),最后输出此准考证的前 5 位和后 4 位,其他位用“*”来代替。说明:使用 StringBuffer 类的相关方法完成实验内容。
- MySQL的IFNULL函数
- redux设计到源码 --- 美团点评技术团队(转)
- Selenium三种等待元素的方式及代码,需要特别注意implicitlyWait的用法
热门文章
- python_87_shelve模块
- java8关于LocalDate,Date
- linux - mysql 安装教程
- QQ 发送邮件
- ubuntu14.04搭建LAMP环境(nginx,php,mysql,linux)详解
- 服务器TIME_WAIT和CLOSE_WAIT分析和解决办法
- 【Linux命令】nohup和&;差异,查看进程和终止进程!
- 利用for循环和range输出9 * 9乘法口诀表
- LeetCode(166) Fraction to Recurring Decimal
- gdb调试时查看内存