CodeForces 1197 D Yet Another Subarray Problem
不得不说CF还是很擅长出这种让人第一眼看摸不着头脑然后再想想就发现是个SB题的题的hhh(请自行断句)。
设sum[]为前缀和数组,那么区间 [l,r]的价值为 sum[r] - sum[l-1] - k*上取整([r-(l-1)]/m)。
或者表示 [l+1,r] 的价值更加简洁一些: sum[r] - sum[l] - k*上取整 ((r-l)/m)。
表示的区间是什么并不重要,我们只在乎后者的最大值,当r确定的时候,值只与 sum[l] + k*上取整 ((r-l)/m) 有关。
我们类似扫描线的做法,每次把右扫描线移动一位(r -> r+1),看看会发生什么:
发现所有 (l%m) == (r%m) 的 l 对应的 sum[l] + k*上取整 ((r-l)/m) 都大了 k,并且还多了一个r的值加了进来,其他的l对应的值都没变。
于是我们直接开个%m意义下的同余系数组记录一下每个等价类的最小值即可,维护是O(1),查询 O(m)。
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=300005; ll a[N],mn[10],ans;
int n,m,k; inline void solve(const int M){
memset(mn,0x7f,sizeof(mn));
mn[0]=k; for(int i=1,j=1;i<=n;j++,i++){
ans=max(ans,a[i]-*min_element(mn,mn+M));
if(j>=M) j-=M;
mn[j]=min(mn[j],a[i])+k;
}
} int main(){
scanf("%d%d%d",&n,&m,&k);
for(int i=1;i<=n;i++) scanf("%lld",a+i),a[i]+=a[i-1];
solve(m),printf("%lld\n",ans);
return 0;
}
CodeForces 1197 D Yet Another Subarray Problem的更多相关文章
- Educational Codeforces Round 69 D. Yet Another Subarray Problem
Educational Codeforces Round 69 (Rated for Div. 2) D. Yet Another Subarray Problem 题目链接 题意: 求\(\sum_ ...
- Educational Codeforces Round 69 (Rated for Div. 2) D. Yet Another Subarray Problem 背包dp
D. Yet Another Subarray Problem You are given an array \(a_1, a_2, \dots , a_n\) and two integers \( ...
- Educational Codeforces Round 69 (Rated for Div. 2) D. Yet Another Subarray Problem 【数学+分块】
一.题目 D. Yet Another Subarray Problem 二.分析 公式的推导时参考的洛谷聚聚们的推导 重点是公式的推导,推导出公式后,分块是很容易想的.但是很容易写炸. 1 有些地方 ...
- maximum subarray problem
In computer science, the maximum subarray problem is the task of finding the contiguous subarray wit ...
- 动态规划法(八)最大子数组问题(maximum subarray problem)
问题简介 本文将介绍计算机算法中的经典问题--最大子数组问题(maximum subarray problem).所谓的最大子数组问题,指的是:给定一个数组A,寻找A的和最大的非空连续子数组.比如 ...
- Educational Codeforces Round 40 F. Runner's Problem
Educational Codeforces Round 40 F. Runner's Problem 题意: 给一个$ 3 * m \(的矩阵,问从\)(2,1)$ 出发 走到 \((2,m)\) ...
- D. Yet Another Subarray Problem 思维 难 dp更好理解
D. Yet Another Subarray Problem 这个题目很难,我比赛没有想出来,赛后又看了很久别人的代码才理解. 这个题目他们差不多是用一个滑动窗口同时枚举左端点和右端点,具体如下: ...
- CodeForces 1197D Yet Another Subarray Problem
Time limit 2000 ms Memory limit 262144 kB Source Educational Codeforces Round 69 (Rated for Div. 2) ...
- Codeforces Beta Round #17 A - Noldbach problem 暴力
A - Noldbach problem 题面链接 http://codeforces.com/contest/17/problem/A 题面 Nick is interested in prime ...
随机推荐
- Web前端开发CSS基础
CSS 层叠样式表(英文全称:Cascading Style Sheets),是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言.CSS不 ...
- Java 日志系统
Java 日志系统 1. 创建日志记录器 private final Logger logger = LoggerFactory.getLogger(LoggerTest.class); 2. 打印日 ...
- 利用Cmake 将最新版本OBS编译成windows版本。
准备工作: 1. VS2013 的最新更新版或者VS2015 2. QT Creater 5.7 https://www.qt.io/ 3. CMake (cmake-gui) 4. obs 依 ...
- app欢迎页问题
今天替换app中的图片,打包成apk后,欢迎页的图片怎么替换都还是旧的,尝试多次以后,确定以及肯定是替换成功了的,而且替换的也都对,只好清理了一下项目,重新build,最后再打包,结果成功了!真是坑! ...
- Java ArrayList常用接口介绍及示例
Java List 常用类型 类型 特征 ArrayList 随机访问元素快:中间插入与删除元素较慢:操作不是线程安全的 LinkedList 中间插入与删除操作代价较低,提供优化的顺序访问:随机访问 ...
- Linux下的用户和用户组,文件权限:chown和chmod
如下图所示,root权限下新建一个用户MasterBai, /etc/passwd文件中新加入一些信息 这个文件中,记录了该服务器的用户信息,如下图红色框起来的用户,就是我们自己创建的用户,而起来2- ...
- Burp破解安装(1.7和2.0)
依赖 由于Brup是使用java语言开发的,因此我们需要本地有jdk8的环境,教程自己百度或者<a href="https://www.runoob.com/java/java-env ...
- textwrap:格式化文本段落
介绍 需要美观打印(pretty-printing)的情况下,可以使用textwrap模块格式化要输出的文本. 它提供了很多文本编辑器和字符处理器中都有的段落自动换行或填充特性 填充段落 import ...
- markdown实现点击链接下载文件
今天用Markdown工具,需要实现一个点连接下载文件的功能,看起来很多简单我也没多想就直接写了,并且单个页面测试的时候也挺正常,就发布了,但是发布后使用的时候发现问题了,浏览器中直接点击链接没反应, ...
- Linux系统的grub和BIOS加密
启动流程: BIOS ——> MBR(主引导记录,找到系统在哪个分区) ——> boot loader(grub) ——>kernel(内核)——>进入启动级别init 硬盘的 ...