Problem C: 文体双花


被A穿的题,我这个屑只拿了20...

意识到这个题简单的时候考试已经快结束了,那边又各种吵,不过下午改题的情况来看,我可能码力还有点问题...

据神O所说,出这个题的时候没想到这个解法,然后考试的时候想到了...于是就成了真签到题


考虑到连续段的表示可以为\(r-l=mx-mi\),然后很显然可以dp一下就是\(dp_i\)代表前\(i\)的贡献然后枚举\(j\)转移,考虑用线段树优化这个转移即可。

具体的\(r\le mx+l-mi\),然后在线段树上移动指针,维护右边的最小值和最小值贡献。

\(mx\)和\(mi\)的贡献在外面用单调栈维护一下就可以了。

还是要注意一下细节的


Code

#include <cstdio>
const int mod=1e9+7;
const int N=1e5+10;
#define add(a,b) (a+b>=mod?a+b-mod:a+b)
#define ls id<<1
#define rs id<<1|1
struct beecute
{
int bee,sum;
beecute friend operator +(beecute a,beecute b)
{
if(a.bee>b.bee) return b;
if(a.bee==b.bee) a.sum=add(a.sum,b.sum);
return a;
}
}bee[N<<2];
int tag[N<<2],n,s0[N],s1[N],p[N],tot0,tot1;
void build(int id,int l,int r)
{
int mid=l+r>>1;
if(l^r) build(ls,l,mid),build(rs,mid+1,r),bee[id]=bee[ls]+bee[rs];
else bee[id].bee=l,bee[id].sum=l==1;
}
void pushdown(int id)
{
if(tag[id])
{
bee[ls].bee+=tag[id],bee[rs].bee+=tag[id];
tag[ls]+=tag[id],tag[rs]+=tag[id];
tag[id]=0;
}
}
void modi(int id,int L,int R,int l,int r,int d)
{
if(l==L&&r==R)
{
bee[id].bee+=d,tag[id]+=d;
return;
}
pushdown(id);
int Mid=L+R>>1;
if(r<=Mid) modi(ls,L,Mid,l,r,d);
else if(l>Mid) modi(rs,Mid+1,R,l,r,d);
else modi(ls,L,Mid,l,Mid,d),modi(rs,Mid+1,R,Mid+1,r,d);
bee[id]=bee[ls]+bee[rs];
}
void ins(int id,int l,int r,int p,int d)
{
if(l==r) {bee[id].sum=d;return;}
pushdown(id);
int mid=l+r>>1;
if(p<=mid) ins(ls,l,mid,p,d);
else ins(rs,mid+1,r,p,d);
bee[id]=bee[ls]+bee[rs];
}
beecute query(int id,int l,int r,int p)
{
if(r==p) return bee[id];
pushdown(id);
int mid=l+r>>1;
if(p<=mid) return query(ls,l,mid,p);
else return bee[ls]+query(rs,mid+1,r,p);
}
int main()
{
scanf("%d",&n);
build(1,1,n);
for(int i=1;i<=n;i++)
{
scanf("%d",p+i);
while(tot0&&p[s0[tot0]]<p[i])
{
modi(1,1,n,s0[tot0-1]+1,s0[tot0],p[i]-p[s0[tot0]]);
--tot0;
}
s0[++tot0]=i;
while(tot1&&p[s1[tot1]]>p[i])
{
modi(1,1,n,s1[tot1-1]+1,s1[tot1],p[s1[tot1]]-p[i]);
--tot1;
}
s1[++tot1]=i;
if(i<n) ins(1,1,n,i+1,query(1,1,n,i).sum);
}
printf("%d\n",query(1,1,n,n).sum);
return 0;
}

2019.1.18

Problem C: 文体双花 解题报告的更多相关文章

  1. Problem A: 道路建设 解题报告

    一定存在一个最优解是一条链 否则可以接上去,不会更差 边权最小的边一定在这条链上 这个比较显然 可以把所有边都减去这个最后加上就行了 把链上的边按距离当前根的深度从小到大排列,设第一个零边位置为\(k ...

  2. Facebook Hacker Cup 2014 Qualification Round 竞赛试题 Square Detector 解题报告

    Facebook Hacker Cup 2014 Qualification Round比赛Square Detector题的解题报告.单击这里打开题目链接(国内访问需要那个,你懂的). 原题如下: ...

  3. codeforces 476C.Dreamoon and Sums 解题报告

    题目链接:http://codeforces.com/problemset/problem/476/C 题目意思:给出两个数:a 和 b,要求算出 (x/b) / (x%b) == k,其中 k 的取 ...

  4. 2011 ACM-ICPC 成都赛区解题报告(转)

    2011 ACM-ICPC 成都赛区解题报告 首先对F题出了陈题表示万分抱歉,我们都没注意到在2009哈尔滨赛区曾出过一模一样的题.其他的话,这套题还是非常不错的,除C之外的9道题都有队伍AC,最终冠 ...

  5. 杭州电子科技大学Online Judge 之 “确定比赛名次(ID1285)”解题报告

    杭州电子科技大学Online Judge 之 "确定比赛名次(ID1285)"解题报告 巧若拙(欢迎转载,但请注明出处:http://blog.csdn.net/qiaoruozh ...

  6. ZOJ 1093 Monkey and Banana (LIS)解题报告

    ZOJ  1093   Monkey and Banana  (LIS)解题报告 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid= ...

  7. C-C Radar Installation 解题报告

    C-C    Radar Installation   解题报告 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=86640#pr ...

  8. poj1173 解题报告

    poj1173 解题报告2013-07-21 13:31 by 期待 ., 42 阅读, 0 评论, 收藏, 编辑 http://poj.org/problem?id=1173 发现此题资料甚少,斗胆 ...

  9. 2015 Multi-University Training Contest 6 solutions BY ZJU(部分解题报告)

    官方解题报告:http://bestcoder.hdu.edu.cn/blog/2015-multi-university-training-contest-6-solutions-by-zju/ 表 ...

随机推荐

  1. UML类图应该怎么看?

    学无止境,精益求精 十年河东,十年河西,莫欺少年穷 学历代表你的过去,能力代表你的现在,学习代表你的将来 我每次写博基本都是这样开头,除了激励自己,每句话也都挺有道理! 呵呵,今天是阴历2017年我工 ...

  2. 【nodejs】让nodejs像后端mvc框架(asp.net mvc)一样处理请求--目录(8/8 完结)

    为什么要做这个 在使用nodejs开发过程中,总是发现需要做很多重复性的体力劳动,且因为自身是服务端程序员出身,感觉有一些服务端好的东西其实可以在nodejs上得到应用并能提高一些开发工作效率. 本系 ...

  3. SSO单点登录_理解

    SSO核心意义就一句话:一处登录,处处登录:一处注销,处处注销.即:在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统. 很多人容易把SSO与OAuth搞混.这里简单说明一下: OA ...

  4. Linux下部署SSH登录时的二次身份验证环境记录(利用Google Authenticator)

    一般来说,使用ssh远程登录服务器,只需要输入账号和密码,显然这种方式不是很安全.为了安全着想,可以使用GoogleAuthenticator(谷歌身份验证器),以便在账号和密码之间再增加一个验证码, ...

  5. restfull环境搭建-helloword

    原文地址:http://blog.csdn.net/u013158799/article/details/39758341 1. REST和RESTful Web Services的简要说明 REST ...

  6. ACM-ICPC 2018 沈阳赛区网络预赛 G. Spare Tire

    这题很好啊,好在我没做出来...大概分析了一下,题目大概意思就是求 问所有满足1<=i<=n且i与m互素的ai之和 最开始我们队的做法是类似线性筛的方法去筛所有数,把数筛出来后剩下数即可, ...

  7. 牛客网-小白月赛6-J-洋灰三角

    题目链接https://www.nowcoder.com/acm/contest/136/J 这题我还是不找规律了,老老实实推吧,传说找规律也可以,我还是算了 递推式:f(n)=k*f(n-1)+p ...

  8. 个人阅读作业2—《No Silver Bullet: Essence and Accidents of Software Engineering》读后感

    在进行了一次结对编程.一次团队编程和一次个人编程项目后,读了<No Silver Bullet: Essence and Accidents of Software Engineering> ...

  9. <<架构漫谈>>读后感

    今天按照老师的要求,看了架构漫谈1--9讲,觉得受益良多,以下是我得点点读后感: (一)什么是架构? 架构的英文是Architecture,从定义上看,架构好像是一个过程,也不是很清晰.下面从架构的缘 ...

  10. FreeMaker使用HashMap

    private Map<String, Object> variables; <input type="hidden" id="tongzhisbm&q ...