牛客网 牛可乐发红包脱单ACM赛 C题 区区区间间间

【题解】
我想到了两种解法。
一种是扫描线+线段树+单调栈。
另一种方法是O(n)的,比较巧妙。
考虑每个数在哪些区间可以作为最小数。最长的区间就是它向左右走,直到有数字比它小,这个可以用单调栈维护。
那么区间数就是它左边可以走的距离*右边可以走的距离,答案减去这个数字*区间数。
再考虑每个数在哪些区间可以作为最大数。方法是一样的。
那么4次单调栈即可。
#include<cstdio>
#include<cstring>
#include<algorithm>
#define LL unsigned long long
#define rg register
#define N 200010
using namespace std;
int T,n,m,top,v[N],l[N],r[N];
struct stack{int num,pos;}st[N];
LL ans,sum[N];
inline LL read(){
LL k=,f=; char c=getchar();
while(c<''||c>'')c=='-'&&(f=-),c=getchar();
while(''<=c&&c<='')k=k*+c-'',c=getchar();
return k*f;
}
int main(){
T=read();
while(T--){
ans=;
n=read();
for(rg int i=;i<=n;i++) v[i]=read();
for(rg int i=;i<=n;i++) sum[i]=sum[i-]+v[i];
top=;
st[].pos=;
for(rg int i=;i<=n;i++){
while(st[top].num>v[i]&&top>) top--;
st[++top].num=v[i]; st[top].pos=i;
l[i]=st[top-].pos+;
// printf("top=%d\n",top);
}
top=;
st[].pos=n+;
for(rg int i=n;i;i--){
while(st[top].num>=v[i]&&top>) top--;
st[++top].num=v[i]; st[top].pos=i;
r[i]=st[top-].pos-;
}
for(rg int i=;i<=n;i++) ans-=1ll*(i-l[i]+)*(r[i]-i+)*v[i];
// for(rg int i=1;i<=n;i++) printf("%d %d\n",l[i],r[i]);
top=;
st[].pos=;
for(rg int i=;i<=n;i++){
while(st[top].num<v[i]&&top>) top--;
st[++top].num=v[i]; st[top].pos=i;
l[i]=st[top-].pos+;
}
top=;
st[].pos=n+;
for(rg int i=n;i;i--){
while(st[top].num<=v[i]&&top>) top--;
st[++top].num=v[i]; st[top].pos=i;
r[i]=st[top-].pos-;
}
// for(rg int i=1;i<=n;i++) printf("%d %d\n",l[i],r[i]);
for(rg int i=;i<=n;i++) ans+=1ll*(i-l[i]+)*(r[i]-i+)*v[i];
printf("%lld\n",ans);
}
return ;
}
牛可乐发红包脱单ACM赛
牛客网 牛可乐发红包脱单ACM赛 C题 区区区间间间的更多相关文章
- 牛客网 牛可乐发红包脱单ACM赛 B题 小a的旅行计划
[题解] 题意其实就是把n个物品分成4个集合,其中三个集合不可以为空(只属于A.只属于B.AB的交),一个集合空或者非空都可以(不属于A也不属于B),问有多少种方案. 考虑容斥,4个集合都不为空的方案 ...
- 牛客网 牛可乐发红包脱单ACM赛 A题 生成树
[题解] 其实就是求两棵树不同的边有多少条.那么我们用一个set来去重即可. #include<cstdio> #include<cstring> #include<se ...
- NowCoder--牛可乐发红包脱单ACM赛C_区区区间间间
题目链接:C_区区区间间间 思路:算贡献,求出每个数为当前最大值时所在的区间个数,和每个数为最小值的区间个数 和这个题有点类似 搭配食用效果更佳 点击这里 #include<bits/stdc+ ...
- 牛可乐发红包脱单OI赛 C 小可爱表白
打个暴力查一下OEIS,5min做完 出题人一开始把式子打错了,一开始的式子的结果为$n * (n + 3) * 2^{n - 3}$ 我们考虑化式子 首先考虑 $\sum\limits_{j = 1 ...
- 牛客网 江西财经大学第二届程序设计竞赛同步赛 D.绕圈游戏-(跳青蛙游戏)找数的所有因子就可以了
链接:https://ac.nowcoder.com/acm/contest/635/D来源:牛客网 D.绕圈游戏 433为了帮ddd提升智商,决定陪他van特殊的游戏.433给定一个带有n个点的环, ...
- 牛客网 牛客练习赛43 F.Tachibana Kanade Loves Game-容斥(二进制枚举)+读入挂
链接:https://ac.nowcoder.com/acm/contest/548/F来源:牛客网 Tachibana Kanade Loves Game 时间限制:C/C++ 1秒,其他语言2秒 ...
- 牛客网 牛客练习赛43 C.Tachibana Kanade Loves Review-最小生成树(并查集+Kruskal)+建虚点+读入挂
链接:https://ac.nowcoder.com/acm/contest/548/C来源:牛客网 Tachibana Kanade Loves Review 时间限制:C/C++ 2秒,其他语言4 ...
- 牛客网 牛客练习赛43 B.Tachibana Kanade Loves Probability-快速幂加速
链接:https://ac.nowcoder.com/acm/contest/548/B来源:牛客网 Tachibana Kanade Loves Probability 时间限制:C/C++ 1秒, ...
- 牛客网 牛客小白月赛12 B.华华教月月做数学-A^B mod P-快速幂+快速乘
链接:https://ac.nowcoder.com/acm/contest/392/B来源:牛客网 华华教月月做数学 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其 ...
随机推荐
- 关于ios7 以上版本 view被导航栏遮挡的问题 解决方案
self.edgesForExtendedLayout = UIRectEdgeNone; 如果导航栏是默认带磨砂透明效果的,使用了edgesForExtendedLayout可能会出现导航栏变不透明 ...
- SpringBoot | contrller的使用
@Controller 处理http请求 @RestController Spring4之后新加的注解,原来返回json需要@ResponseBody配合@Controller @RequestMap ...
- Asp.net WebApi 异常处理解决方案
一.使用异常筛选器捕获所有异常 我们知道,一般情况下,WebApi作为服务使用,每次客户端发送http请求到我们的WebApi服务里面,服务端得到结果输出response到客户端.这个过程中,一旦服务 ...
- POM报错Failure to transfer org.apache.maven.plugins:maven-resources-plugin:pom:2.6 from
解决方式一: 1.查看.m2\repository\org\apache\maven\plugins\maven-resources-plugin\下maven-resources-plugin- ...
- 香港药品 ref
--公牛牌风湿骨刺丹30粒 参考网站--http://item.jd.com/1955815605.html?gjz=0#comments-list 88 --参考网站1,没有 http://www. ...
- eclipse导入php项目
整个工程的都在一个文件夹里面 怎么把它导入到eclipse里面呢:在eclipse里新建一个与要导入的工程同名工程.
- 如何在Windows2008 Server服务器上开启Ping或者禁PING
方法1:命令行模式 进入服务器后 点击 开始--运行 输入命令: netsh firewall set icmpsetting 8 这样就可以在外部ping到服务器了 非常简单实用! 同样道理,如果想 ...
- UVALive - 6428(扩展欧几里德)
http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=48388 前段时间偶然碰到的一道题,今天突然想到没把它记录下来. 比较不错的扩 ...
- [转]写给Git初学者的7个建议
本文转自:http://www.open-open.com/news/view/b7227e 阅读目录 第一条:花时间去学习 Git 的基本操作 第二条:从简单的 Git 工作流开始 第四条:理解分支 ...
- SpringBoot 2.x (7):拦截器
类似以前SpringMVC的拦截器,但也有一些区别 SpringBoot的拦截器有两种方式: 第一种方式:过时的方式,适用于SpringBoot1.x的方式 package org.dreamtech ...