[jzoj 5343] [NOIP2017模拟9.3A组] 健美猫 解题报告 (差分)
题目链接:
http://172.16.0.132/senior/#main/show/5343
题目:

题解:
记旋转i次之后的答案为$ans_i$,分别考虑每个元素对ans数组的贡献
若$s_i<i$:
对$ans_0,..,ans_{i-s_i}$,贡献分别是$i-s_i,i-s_i-1,...,0$
对$ans_{i-s_i+1},...,ans_{i-1}$,贡献分别是$1,...,s_i-1$
对$ans_i,...,ans_{n-1}$,贡献分别是$n-s_i,...,i+1-s_i$
若$s_i=i$:
对$ans_0$,贡献是$0$
对$ans_1,...,ans_{i-1}$,贡献分别是$1,...,i-1$
对$ans_i,...,ans_{n-1}$,贡献分别是$n-i,...,1$
若$s_i>i$:
对$ans_0,...,ans_{i-1}$,贡献分别是$s_i-i,...,s_i-1$
对$ans_i,...,ans_{i+n-s_i}$,贡献分别是$n-s_i,...,0$
对$ans_{i+n-s_i+1},...,ans_{n-1}$,贡献分别是$1,...,s_i-i-1$
发现都是公差为$1$或$-1$的等差数列,显然线段树可以维护,但是数据范围不允许而且我们也不需要。怎么办呢?我们差分
对ans数组二阶差分即可,注意二阶差分的同时需要在一阶差分消去影响
注意差分的题目手动模拟是很有必要的,每个差分独立考虑
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<iostream>
using namespace std;
typedef long long ll; const int N=2e6+;
const ll inf=1e15;
int n;
ll s[N],cha1[][N],cha2[][N],a[N],b[N],p[N];
inline int read(){
char ch=getchar();int s=,f=;
while (ch<''||ch>'') {if (ch=='-') f=-;ch=getchar();}
while (ch>=''&&ch<='') {s=(s<<)+(s<<)+ch-'';ch=getchar();}
return s*f;
}
int main()
{
n=read();
for (int i=;i<=n;i++) s[i]=read();
for (int i=;i<=n;i++)
{
if (s[i]<i)
{
if (<=i-s[i]) cha2[][i-s[i]-]++;
if (i-s[i]+<=i-) {cha1[][i-s[i]+]++;cha1[][i]--;cha1[][i]-=s[i]-;}
if (i<=n-) {cha2[][n-]++;cha2[][i-]--;cha2[][n-]+=i-s[i];cha2[][i-]-=n-s[i];}
}
if (s[i]==i)
{
if (i-s[i]+<=i-) {cha1[][]++;cha1[][i]--;cha1[][i]-=i-;}
if (i<=n-) {cha2[][n-]++;cha2[][i-]--;cha2[][i-]-=n-i;}
}
if (s[i]>i)
{
if (<=i-) {cha1[][]++;cha1[][i]--;cha1[][]+=s[i]-i-;cha1[][i]-=s[i]-;}
if (i<=i+n-s[i]) {cha2[][i+n-s[i]-]++;cha2[][i-]--;cha2[][i-]-=n-s[i];}
if (i+n-s[i]+<=n-) {cha1[][i+n-s[i]+]++;cha1[][n]--;cha1[][n]-=s[i]-i-;}
}
}
for (int i=;i<n;i++) p[i]=p[i-]+cha1[][i];
for (int i=;i<n;i++) cha1[][i]+=p[i];
for (int i=n-;i>=;i--) p[i]=p[i+]+cha2[][i];
for (int i=n-;i>=;i--) cha2[][i]+=p[i];
for (int i=;i<n;i++) a[i]=a[i-]+cha1[][i];
for (int i=n-;i>=;i--) b[i]=b[i+]+cha2[][i];
ll mi=inf;
for (int i=;i<n;i++) mi=min(mi,a[i]+b[i]);
printf("%lld\n",mi);
return ;
}
[jzoj 5343] [NOIP2017模拟9.3A组] 健美猫 解题报告 (差分)的更多相关文章
- [jzoj 6087] [GDOI2019模拟2019.3.26] 获取名额 解题报告 (泰勒展开+RMQ+精度)
题目链接: https://jzoj.net/senior/#main/show/6087 题目: 题解: 只需要统计$\prod_{i=l}^r (1-\frac{a_i}{x})$ =$exp(\ ...
- [jzoj 5926] [NOIP2018模拟10.25] naive 的图 解题报告(kruskal重构树+二维数点)
题目链接: https://jzoj.net/senior/#main/show/5926 题目: 题解: 显然最小的最大路径在最小生成树上(最小生成树=最小瓶颈生成树) 于是我们建出kruskal重 ...
- JZOJ 5246. 【NOIP2017模拟8.8A组】Trip(trip)
5246. [NOIP2017模拟8.8A组]Trip(trip) (File IO): input:trip.in output:trip.out Time Limits: 1500 ms Memo ...
- JZOJ 5235. 【NOIP2017模拟8.7A组】好的排列
5235. [NOIP2017模拟8.7A组]好的排列 (File IO): input:permutation.in output:permutation.out Time Limits: 1000 ...
- JZOJ 5236. 【NOIP2017模拟8.7A组】利普希茨
5236. [NOIP2017模拟8.7A组]利普希茨 (File IO): input:lipschitz.in output:lipschitz.out Time Limits: 1000 ms ...
- 【第40套模拟题】【noip2011_mayan】解题报告【map】【数论】【dfs】
目录:1.潜伏者 [map] 2.Hankson的趣味题[数论]3.mayan游戏[dfs] 题目: 1. 潜伏者(spy.pas/c/cpp)[问题描述]R 国和S 国正陷入战火之中,双方都互派间谍 ...
- 【模拟题(电子科大MaxKU)】解题报告【树形问题】【矩阵乘法】【快速幂】【数论】
目录: 1:一道简单题[树形问题](Bzoj 1827 奶牛大集会) 2:一道更简单题[矩阵乘法][快速幂] 3:最简单题[技巧] 话说这些题目的名字也是够了.... 题目: 1.一道简单题 时间1s ...
- [jzoj 5178] [NOIP2017提高组模拟6.28] So many prefix? 解题报告(KMP+DP)
题目链接: https://jzoj.net/senior/#main/show/5178 题目: 题解: 我们定义$f[pos]$表示以位置pos为后缀的字符串对答案的贡献,答案就是$\sum_{i ...
- NOIP2008 普及组T4 立体图 解题报告-S.B.S.(施工未完成)
题目描述 小渊是个聪明的孩子,他经常会给周围的小朋友们将写自己认为有趣的内容.最近,他准备给小朋友们讲解立体图,请你帮他画出立体图. 小渊有一块面积为m*n的矩形区域,上面有m*n个边长为1的格子,每 ...
随机推荐
- webview同步cookies
目前很多android app都内置了可以显示web页面的界面,会发现这个界面一般都是由一个叫做WebView的组件渲染出来的,学习该组件可以为你的app开发提升扩展性. 先说下WebView的一些优 ...
- BZOJ3170: [Tjoi2013]松鼠聚会
[传送门:BZOJ3170] 简要题意: 给出n个点的坐标,规定两个点的距离=max(|x1-x2|,|y1-y2|) 要求选出一个点,使得这个点到所有点的距离和最小 题解: 切比雪夫转换例题 将一个 ...
- kentico中提示Message: An invalid SQL query was used.
在调用CMSAbstractWebPart类的GetValue方法的时候出错. namespace CMS.PortalEngine.Web.UI{ /// <summary> /// B ...
- zzulioj--1637--Happy Thanksgiving Day - WoW yjj!(水)
1637: Happy Thanksgiving Day - WoW yjj! Time Limit: 1 Sec Memory Limit: 128 MB Submit: 104 Solved: ...
- DB-MySQL:MySQL NULL 值处理
ylbtech-DB-MySQL:MySQL NULL 值处理 1.返回顶部 1. MySQL NULL 值处理 我们已经知道 MySQL 使用 SQL SELECT 命令及 WHERE 子句来读取数 ...
- 使用cxf3.0.4搭建webservice服务需要的最精简jar包
转自:https://blog.csdn.net/w1014074794/article/details/47862163 下面是测试结果,只列出报错了的测试: 1.org.apache.catali ...
- POJ 2923 DP
题意: 两辆车去运一堆货物,货物数量小于等于10,问最少需要几趟能把货物全部运到目的地. 思路: 思路很简单,就是状态压缩成二进制.判断一下每个状态能不能运输.再进行一下DP. 设s[]数组里记录所有 ...
- Java Servlet 配置
图片太大,可以右键另存再查看,也可以鼠标点击拖置一下,用浏览器单独承载放大查看.
- jmeter的认识
jmeter JMeter是Apache组织开发的开源项目,设计之初是用于做性能测试的,同时它在实现对各种接口的调用方面做的比较成熟,因此,常被用做接口功能测试和性能测试. 它能够很好的支持各种常见接 ...
- 数据库SQL语句错误
Caused by: android.database.sqlite.SQLiteException: near "where": syntax error(Sqlite co ...