传送门

(虽然是A了但是不知道复杂度是不是正确的

考虑以某个位置为结尾的合法划分

先考虑min,带来的影响是限制了最小长度,预处理出这个最小长度后,这可以在处理到这个数时,把不能算的部分去掉(不满足min条件的话必定满足max条件)。

单独考虑max条件

对于每一个数,找出以它为最大值的区间后,暂时不考虑min,就只限制了划分的最大长度,这时分类讨论一下(见代码),有一部分需要暴力处理(不会证复杂度)

#include<cstdio>
#include<algorithm>
#define MN 510000
using namespace std; const int MOD=1e9+;
int n,m,a[MN],_l[MN],st[MN],top=,v[MN],V[MN],tmp,ans,fi[MN],ne[MN];
inline int max(int x,int y){return x>y?x:y;}
inline int min(int x,int y){return x<y?x:y;}
inline void M(int &x){while(x>=MOD)x-=MOD;while(x<)x+=MOD;}
inline int ask(int l,int r){int a=V[r-]-(l==?:V[l-]);M(a);return a;}
inline void add(int l,int r,int sum){M(v[l]+=sum);M(v[r+]-=sum);}
inline void work(int s,int _s,int l){
int sum=;
for (int i=;i<=l;i++){
add(_s,_s+i-,ask(s+i-,s+i-));
}
}
int main(){
scanf("%d",&n);
for (int i=;i<=n;i++) scanf("%d",&a[i]); int L=,R=;
for (int i=;i<=n;i++){
while(L<=R&&a[st[R]]>=a[i]) R--;
st[++R]=i;
while(L<R&&i-a[st[L+]]+>=st[L]) L++;
_l[i]=max(min(st[L],i-a[st[L]]+),);
} V[]=;
for (int i=;i<=n;i++){
while(a[st[top]]<=a[i]&&top) ne[st[top]]=i,top--;fi[i]=st[top];
st[++top]=i;
}
for (int i=;i<=n;i++){
int l=fi[i]+,r=ne[i]?ne[i]-:n,sum;
if (a[i]>=r-l+){
add(i,r,ask(l,i));
}else if (a[i]>=i-l+&&a[i]>=r-i+){
add(i,l+a[i]-,ask(l,i));
add(l+a[i],r,ask(r-a[i]+,i));
work(l+,l+a[i],r-(l+a[i]));
}else if (a[i]<=i-l+&&a[i]<=r-i+){
work(i-a[i]+,i,a[i]);
}else if (a[i]<=i-l+){
add(i,r,ask(r-a[i]+,i));
work(i-a[i]+,i,r-i);
}else if (a[i]<=r-i+){
add(i,l+a[i]-,ask(l,i));
work(l+,l+a[i],i-l);
}
M(tmp+=v[i]);
M(ans=tmp-ask(_l[i]+,i));
M(V[i]=ans+V[i-]);
}
printf("%d\n",ans);
}

Codechef August Challenge 2018 : Safe Partition的更多相关文章

  1. Codechef August Challenge 2018 : Chef at the River

    传送门 (要是没有tjm(Sakits)的帮忙,我还真不知道啥时候能做出来 结论是第一次带走尽可能少的动物,使未带走的动物不冲突,带走的这个数量就是最优解. 首先这个数量肯定是下界,更少的话连第一次都 ...

  2. Codechef August Challenge 2018 : Interactive Matrix

    传送门 首先整个矩阵可以被分为很多小矩阵,小矩阵内所有行的单调性是一样的,所有列的单调性是一样的. 考虑如何在这样一个小矩阵中找出答案.我的策略是每次取四个角中最大值和最小值的点,这样可以每次删掉一行 ...

  3. Codechef August Challenge 2018 : Lonely Cycles

    传送门 几波树形dp就行了. #include<cstdio> #include<cstring> #include<algorithm> #define MN 5 ...

  4. Codechef August Challenge 2018 : Coordinate Compression

    传送门 外边二分,里面拿线段树维护贪心就行了. #include<cstdio> #include<vector> #include<cstring> #inclu ...

  5. Codechef August Challenge 2018 : Modular GCD

    传送门 一开始还手动拓欧找规律,发现好像玩不了. 然后想了想,A-B这个数比较小,枚举它的因子判断合不合法就行了. 需要特判A=B的情况. #include<cstdio> #includ ...

  6. Codechef October Challenge 2018 游记

    Codechef October Challenge 2018 游记 CHSERVE - Chef and Serves 题目大意: 乒乓球比赛中,双方每累计得两分就会交换一次发球权. 不过,大厨和小 ...

  7. Codechef September Challenge 2018 游记

    Codechef September Challenge 2018 游记 Magician versus Chef 题目大意: 有一排\(n(n\le10^5)\)个格子,一开始硬币在第\(x\)个格 ...

  8. codechef February Challenge 2018 简要题解

    比赛链接:https://www.codechef.com/FEB18,题面和提交记录是公开的,这里就不再贴了 Chef And His Characters 模拟题 Chef And The Pat ...

  9. Codechef STMINCUT S-T Mincut (CodeChef May Challenge 2018) kruskal

    原文链接http://www.cnblogs.com/zhouzhendong/p/9010945.html 题目传送门 - Codechef STMINCUT 题意 在一个有边权的无向图中,我们定义 ...

随机推荐

  1. LFYZ-OJ ID: 1017 士兵站队问题

    分析 该题和"输油管道问题"类似,只不过由一维问题编程了二维问题.可以将总步数分解为移动到水平线y位置的总步数ysteps和移动到序列x, x+1, x+2, ... , x+n- ...

  2. docker下安装mysql

    docker run -d -p 3306:3306 -v /root/docker/mysql/conf/mysql.cnf:/etc/mysql/conf.d/mysql.cnf -v /root ...

  3. js文件上传原理(form表单 ,FormData + XHR2 + FileReader + canvas)

    目录 form表单上传 FormData + XHR2 + FileReader + canvas 无刷新本地预览压缩上传实例 目前实现上传的方式 浏览器小于等于IE9(低版本浏览器)使用下面的方式实 ...

  4. jpa返回List<Map<String, Object>>相当于jdbctemplate的queryForlist

    public class Test(){ @PersistenceContext(unitName = "manageFactory") protected EntityManag ...

  5. struts2简单入门-数据校验

    数据校验流程 校验数据的方式 重写execute方法在内部写校验代码 public class LoginAdminAction extends ActionSupport { private Use ...

  6. LOJ #556. 「Antileaf's Round」咱们去烧菜吧

    好久没更博了 咕咕咕 现在多项式板子的常数巨大...周末好好卡波常吧.... LOJ #556 题意 给定$ m$种物品的出现次数$ B_i$以及大小$ A_i$ 求装满大小为$[1..n]$的背包的 ...

  7. 网络学习day02_OSI七层模型及数据的传输过程

    title: 2018.9.2 OSI七层模型及数据的传输过程 tags: 计算机网络, OSI七层模型, 数据传输, 数据解封装 --- OSI七层模型和TCP/IP五层模型 OSI七层模型 我们说 ...

  8. torch.utils.data.DataLoader()中的pin_memory参数

    参考链接:http://www.voidcn.com/article/p-fsdktdik-bry.html 该pin_memory参数与锁页内存.不锁页内存以及虚拟内存三个概念有关: 锁页内存理解( ...

  9. 通过go-ethereum源码看如何管理项目

    今天抽空看了下go-ethereum项目的源码 ( https://github.com/ethereum/go-ethereum ),其中 ethereum 是github下的一个帐号.go-eth ...

  10. Jmeter学习笔记03-元件作用域及执行顺序

    Jmeter可以通过鼠标拖拽来随意改变元件之间的顺序以及元件的层级关系,随着元件所在域的不同,在执行时候,会有不同效果 层级关系和元件类型决定了在测试计划中各元件的执行顺序. 1)元件的作用域: jm ...