[CC-SEINC]Sereja and Subsegment Increasings
[CC-SEINC]Sereja and Subsegment Increasings
题目大意:
有长度为\(n(n\le10^5)\)的序列\(A\)和\(B\)。
在一次操作中,可以选择一个区间增加\(1\)。
求让\(A\)和\(B\)在模\(4\)意义下相等,至少要对\(A\)执行多少次操作。
思路:
对\(A,B\)对应作差,\(C_i=B_i-A_i\)。
求\(C\)的查分\(D_i=C_i-C_{i+1}\)。
如果不考虑模\(4\),答案即为\(\sum\max(D_i,0)\)。
而模\(4\)相当于可以对\(C\)区间加\(4\),对应到\(D\)上就是对于区间\((l,r]\),\(D_l+=4,D_r-=4\)。
考虑怎样选择区间能够使答案更优。
对于区间\((l,r]\),考虑以下情况:
- \(D_l=2,D_r=-3\),会使答案\(-1\);
- \(D_l=3,D_r=-2\),会使答案\(-1\);
- \(D_l=3,D_r=-3\),会使答案\(-2\)。
而其余情况都不会使答案更优。
因此可以线性扫一遍,记录\(2,3\)出现的次数,将当前点作为右端点时择优更新答案即可。
时间复杂度\(\mathcal O(n)\)。
源代码:
#include<cstdio>
#include<cctype>
#include<algorithm>
inline int getint() {
register char ch;
while(!isdigit(ch=getchar()));
register int x=ch^'0';
while(isdigit(ch=getchar())) x=(((x<<2)+x)<<1)+(ch^'0');
return x;
}
const int N=1e5+1;
int a[N];
int main() {
for(register int T=getint();T;T--) {
const int n=getint();
for(register int i=1;i<=n;i++) a[i]=getint();
for(register int i=1;i<=n;i++) {
a[i]=(getint()-a[i]+4)%4;
}
int ans=a[n],cnt2=0,cnt3=0;
for(register int i=1;i<n;i++) {
a[i]-=a[i+1];
ans+=std::max(0,a[i]);
}
for(register int i=1;i<=n;i++) {
if(a[i]==2) cnt2++;
if(a[i]==3) cnt3++;
if(a[i]==-2) {
if(cnt3) {
cnt2++;
cnt3--;
ans--;
}
}
if(a[i]==-3) {
if(cnt3) {
cnt3--;
ans-=2;
} else if(cnt2) {
cnt2--;
ans--;
}
}
}
printf("%d\n",ans);
}
return 0;
}
[CC-SEINC]Sereja and Subsegment Increasings的更多相关文章
- CF380C. Sereja and Brackets[线段树 区间合并]
C. Sereja and Brackets time limit per test 1 second memory limit per test 256 megabytes input standa ...
- Atitti.dw cc 2015 绿色版本安装总结
Atitti.dw cc 2015 绿色版本安装总结 1.1. 安装程序无法初始化.请下载adobe Support Advisor检测该问题.1 1.1.1. Adobe Application M ...
- 【Hello CC.NET】CC.NET 实现自动化集成
一.背景 公司的某一金融项目包含 12 个子系统,新需求一般按分支来开发,测完后合并到主干发布.开发团队需要同时维护开发环境.测试环境.模拟环境(主干).目前面临最大的两个问题: 1.子系统太多,每次 ...
- 浅谈iptables防SYN Flood攻击和CC攻击
------------------------本文为自己实践所总结,概念性的东西不全,这里粗劣提下而已,网上很多,本文主要说下目前较流行的syn洪水攻击和cc攻击------------------ ...
- checking for fcc ....no checking for cc .. no
源码编译,提示缺少gcc cc cl.exe 解决方案: yum install -y gcc glibc
- 编译器 cc、gcc、g++、CC 的区别
gcc 是GNU Compiler Collection,原名为Gun C语言编译器,因为它原本只能处理C语言,但gcc很快地扩展,包含很多编译器(C.C++.Objective-C.Ada.Fort ...
- [CC]区域生长算法——点云分割
基于CC写的插件,利用PCL中算法实现: void qLxPluginPCL::doRegionGrowing() { assert(m_app); if (!m_app) return; const ...
- [CC]点云密度计算
包括两种计算方法:精确计算和近似计算(思考:local density=单位面积的点数 vs local density =1/单个点所占的面积) 每种方法可以实现三种模式的点云密度计算,CC里面的 ...
- 【日常小记】统计后缀名为.cc、.c、.h的文件数【转】
转自:http://www.cnblogs.com/skynet/archive/2011/03/29/1998970.html 在项目开发时,有时候想知道源码文件中有多少后缀名为.cc..c..h的 ...
随机推荐
- 自然语言处理词向量模型-word2vec
自然语言处理与深度学习: 语言模型: N-gram模型: N-Gram模型:在自然语言里有一个模型叫做n-gram,表示文字或语言中的n个连续的单词组成序列.在进行自然语言分析时,使用n-gram或者 ...
- Java IO,硬骨头也能变软
开胃菜 先看一张网上流传的http://java.io包的类结构图: 当你看到这幅图的时候,我相信,你跟我一样内心是崩溃的. 有些人不怕枯燥,不怕寂寞,硬着头皮看源码,但是,能坚持下去全部看完的又有几 ...
- 【黑客免杀攻防】读书笔记17 - Rootkit基础
1.构建Rootkit基础环境 1.1.构建开发环境 VS2012+WDK8 1.2.构建基于VS2012的调试环境 将目标机.调试机配置在同一个工作组内 sVS2012配置->DRIVER-& ...
- spring单元测试的基本配置
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:trade.ap ...
- spring 学习之二 AOP编程
AOP概念 AOP, aspect oriented programing,翻译过来就是面向切面编程的意思,那什么叫面向切面编程呢?相对于之前传统的纵向继承方式来对原有功能进行功能扩展, 面向切面编程 ...
- pip离线安装
pip freeze > requirements.txt pip download <packages> pip install --no-index --find-links=& ...
- python网络编程--进程线程
一:什么是进程 一个程序执行时的实例被称为一个进程. 每个进程都提供执行程序所需的资源.一个进程有一个虚拟地址空间.可执行代码.对系统对象的开放句柄.一个安全上下文.一个独特的进程标识符.环境变量.一 ...
- Python列表(list)
序列是Python中最基本的数据结构.序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推. 此外,Python已经内置确定序列的长度以及确定最大和最小的元素 ...
- SQLSERVER中的系统存储过程的使用的总结
-----------------------------系统存储过程-------------------------------- --列出SQL Server实例中的数据库sp_database ...
- java算法小例子
作为一个程序员,有时候我觉得自己都不适合,因为自己数学不好,算法不好,脑子不够灵活.而对于算法,感觉就像是数学题,总觉得很难.以前上学,在班里总有几个什么都不好,但唯独数学很厉害,真气人!面对难题时, ...