Problem C: 文体双花 解题报告
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: 文体双花 解题报告的更多相关文章
- Problem A: 道路建设 解题报告
一定存在一个最优解是一条链 否则可以接上去,不会更差 边权最小的边一定在这条链上 这个比较显然 可以把所有边都减去这个最后加上就行了 把链上的边按距离当前根的深度从小到大排列,设第一个零边位置为\(k ...
- Facebook Hacker Cup 2014 Qualification Round 竞赛试题 Square Detector 解题报告
Facebook Hacker Cup 2014 Qualification Round比赛Square Detector题的解题报告.单击这里打开题目链接(国内访问需要那个,你懂的). 原题如下: ...
- codeforces 476C.Dreamoon and Sums 解题报告
题目链接:http://codeforces.com/problemset/problem/476/C 题目意思:给出两个数:a 和 b,要求算出 (x/b) / (x%b) == k,其中 k 的取 ...
- 2011 ACM-ICPC 成都赛区解题报告(转)
2011 ACM-ICPC 成都赛区解题报告 首先对F题出了陈题表示万分抱歉,我们都没注意到在2009哈尔滨赛区曾出过一模一样的题.其他的话,这套题还是非常不错的,除C之外的9道题都有队伍AC,最终冠 ...
- 杭州电子科技大学Online Judge 之 “确定比赛名次(ID1285)”解题报告
杭州电子科技大学Online Judge 之 "确定比赛名次(ID1285)"解题报告 巧若拙(欢迎转载,但请注明出处:http://blog.csdn.net/qiaoruozh ...
- ZOJ 1093 Monkey and Banana (LIS)解题报告
ZOJ 1093 Monkey and Banana (LIS)解题报告 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid= ...
- C-C Radar Installation 解题报告
C-C Radar Installation 解题报告 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=86640#pr ...
- poj1173 解题报告
poj1173 解题报告2013-07-21 13:31 by 期待 ., 42 阅读, 0 评论, 收藏, 编辑 http://poj.org/problem?id=1173 发现此题资料甚少,斗胆 ...
- 2015 Multi-University Training Contest 6 solutions BY ZJU(部分解题报告)
官方解题报告:http://bestcoder.hdu.edu.cn/blog/2015-multi-university-training-contest-6-solutions-by-zju/ 表 ...
随机推荐
- mui 下拉刷新和上拉加载
<body> mui文档提供了两种不同模式的下拉刷新,具体情况看文档,链接:http://dev.dcloud.net.cn/mui/pulldown/ 单 webview 模式和 双 w ...
- Luogu P2421 [NOI2002]荒岛野人
最近上课时提到的一道扩欧水题.还是很可做的. 我们首先注意到,如果一个数\(s\)是符合要求的,那么那些比它大(or 小)的数不一定符合要求. 因此说,答案没有单调性,因此不能二分. 然后题目中也提到 ...
- redis调优的实战经验
本文根据redis的info命令查看redis的内存使用情况以及state状态,来观察redis的运行情况以及需要作出的相应优化. info 1.memory used_memory:13409011 ...
- CentOS 7.2:Failed to start IPv4 firewall with iptables
问题 系统是centos7.2,且已经安装了iptables服务,但是在执行启动命令后,却报了iptables服务无法正常启动的错误. 启动命令如下: systemctl start iptables ...
- MySQL针对Swap分区的运维注意点
Linux有很多很好的内存.IO调度机制,但是并不会适用于所有场景.对于运维人员来说,Linux比较让人头疼的一个地方是:它不会因为MySQL很重要就避免将分配给MySQL的地址空间映射到swap上. ...
- db2修改最大连接数
查看当前连接数,sample为数据库名db2 list applications for db sample db2 list applications for db sample show deta ...
- 趟坑:使用pip安装TensorFlow
这几天在安装TensorFlow,看了很多教程,方法也试了几种. 最后还是用pip安装成功的,过程如下. 1.安装ubuntu后在 系统设置-软件与更新-附加驱动 里,更新N卡驱动. (N卡官网下载 ...
- githup地址
githup地址:https://github.com/caowenjing/test.git
- Unigine mesh顶点坐标转换精度问题
本问题虽然与Unigine引擎相关,但对其他精度问题也有参考价值. 问题: 将精细模型顶点从自身参考系的相对坐标(类似4378.95020,4561.00000,31.3887463) 转到椭球面世界 ...
- beta 答辩总结
评审表 编号 团队名称 项目名称 格式 内容 PPT 演讲 答辩 总分/100 1 天机组 指尖加密 14 13 13 13 13 66 2 PMS Your eyes 14 14 17 14 15 ...