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. SPI内容随笔

    关于SPI的通信: SPI采用的是主从模式的同步通信,通过时钟来控制:一般情况下,使用双向全双工,收发的数据放在缓冲器FIFO中.数据的传输是主SPI的时钟在控制,从机是不能产生时钟的,如果没有时钟, ...

  2. .NET持续集成与自动化部署之路第二篇——使用NuGet.Server搭建公司内部的Nuget(包)管理器

    使用NuGet.Server搭建公司内部的Nuget(包)管理器 前言     Nuget是一个.NET平台下的开源的项目,它是Visual Studio的扩展.在使用Visual Studio开发基 ...

  3. ElasticSearch实践系列(二):探索集群

    前言 为了方便ELK的逐步搭建,我们本篇文章先安装Kibana,然后用Kibana的DevTols执行命令.也可以安装elasticsearch-head运行命令. 安装Kibana 参考Instal ...

  4. Python从菜鸟到高手(2):清空Python控制台

    执行python命令会进入Python控制台.在Python控制台中可以用交互的方式执行Python语句.也就是执行一行Python语句,会立刻返回执行结果.   当Python控制台输入过多的Pyt ...

  5. 个人博客作业Week2(9月30日)

    一.是否需要有代码规范 1.这些规范都是官僚制度下产生的浪费大家的编程时间.影响人们开发效率, 浪费时间的东西. 这些规范并不是一开始就有的,也不是由某个人规定的,代码规范是程序员们在不断地编程实践过 ...

  6. [BUAA软工]第二次博客作业---结对编程

    [BUAA软工]结对作业 项目 内容 这个作业属于哪个课程 北航软工 这个作业的要求在哪里 2019年软件工程基础-结对项目作业 我在这个课程的目标是 学习如何以团队的形式开发软件,提升个人软件开发能 ...

  7. Linux实践:ELF文件格式分析

    标签(空格分隔): 20135321余佳源 一.基础知识 ELF全称Executable and Linkable Format,可执行连接格式,ELF格式的文件用于存储Linux程序.ELF文件(目 ...

  8. 《Linux内核设计与分析》第四章读书笔记

    <内核设计与实现>第四章读书笔记 第四章:进程调度 进程(操作系统)程序的运行态表现形式. 进程调度程序,它是确保进程能有效工作的一个内核子系统. 调度程序负责决定将哪个进程投入运行,何时 ...

  9. Alpha冲刺之事后诸葛亮

    组长博客 作业博客 项目Postmortem 设想和目标 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 我们的软件针对的是福大学子来到食堂会犹豫不决无法决定吃什么 ...

  10. suqid透明正向代理

    如果想实现透明正向代理,则必需将用户的网关IP指向 Squid 服务器,而此后便无需再修改浏览器选项 在命令行 <菜单+R> 中使用 ping  命令: ping  www.baidu.c ...