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. 【php增删改查实例】第十七节 - 用户登录(1)

    新建一个login文件,里面存放的就是用户登录的模块. <html> <head> <meta charset="utf-8"> <sty ...

  2. 决策树(ID3,C4.5,CART)原理以及实现

    决策树 决策树是一种基本的分类和回归方法.决策树顾名思义,模型可以表示为树型结构,可以认为是if-then的集合,也可以认为是定义在特征空间与类空间上的条件概率分布. [图片上传失败...(image ...

  3. .Net版本依赖之坑引发的搜查

    前言 今天上午,一个客户反馈XX消息没有推送到第三方链接.于是我查看了推送日志列表,并没有今天的.接着登录服务器查询文件日志,看到了记录.我们的代码步骤是消息先推送到消息队列,消费消息队列时,记录文件 ...

  4. apache工作模式总结及网站访问缓慢处理记录

    apache目前主要有两种模式:prefork模式和worker模式:1)prefork模式(默认模式)prefork是Unix平台上的默认(缺省)MPM,使用多个子进程,每个子进程只有一个线程.每个 ...

  5. vue项目环境搭建

    安装node.js $ npm install -g vue-cli $ vue init webpack my-project ?Project name ?Project description ...

  6. 同步手绘板——PC端实现画板

    同步显示上设想通过bitmap传值再在web端显示,查阅资料发现有点难以实现,所以在web也生成一个画板,实现与android端类似功能,由android传递路径集合到web端显示.

  7. github第一次作业链接

    https://github.com/xuhuzi/test/blob/master/test1 https://github.com/xuhuzi/test/blob/master/test2 ht ...

  8. BugPhobia进阶篇章:功能规格说明书

    0x01 :特别鸣谢 首先特别鸣谢<构建之法>中并没有给出固定化格式的功能规格说明书的样例,因此在此次的说明书中将尽可能用生动形象的例子展示软件交互阐释 因此受到它本身的启发,此次团队功能 ...

  9. zookeeper安装和使用 windows环境(转)

    原文地址: http://blog.csdn.net/tlk20071/article/details/52028945 简介 ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是G ...

  10. MyBatis 返回类型resultType为map时的null值不返回问题

    问题一:    查询结果集中 某字段 的值为null,在map中不包含该字段的key-value对 解决:在mybatis.xml中添加setting参数 <!-- 在null时也调用 sett ...