牛客网 牛可乐发红包脱单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,其 ...
随机推荐
- nginx命令介绍
[root@webmaster nginx]# ./sbin/nginx -h nginx version: nginx/1.12.2 Usage: nginx [-?hvVtTq] [-s sign ...
- redis启停
1 查看服务器上启动的redis服务 开了两个redis单机服务,监听在两个端口. 开了一个集群,监听在6个端口. [root@localhost bin]# ps aux | grep redis ...
- 题解报告:poj 1113 Wall(凸包)
Description Once upon a time there was a greedy King who ordered his chief Architect to build a wall ...
- 1-18String类简介
字符串(String)的不可变性 String类在java.lang包下面,是Object类的直接子类,通过API或者源码可以看到,String类是final修饰的,这说明String类不能被继承. ...
- JAVA常用知识总结(六)——Mybatis
为什么说Mybatis是半自动ORM映射工具?它与全自动的区别在哪里? Hibernate属于全自动ORM映射工具,使用Hibernate查询关联对象或者关联集合对象时,可以根据对象关系模型直接获取, ...
- [转]写给Git初学者的7个建议
本文转自:http://www.open-open.com/news/view/b7227e 阅读目录 第一条:花时间去学习 Git 的基本操作 第二条:从简单的 Git 工作流开始 第四条:理解分支 ...
- P1179 数字统计
题目描述 请统计某个给定范围[L, R]的所有整数中,数字 2 出现的次数. 比如给定范围[2, 22],数字 2 在数 2 中出现了 1 次,在数 12 中出现 1 次,在数 20 中出 现 1 次 ...
- AJPFX关于多线程概述及应用
一.认识多任务.多进程.单线程.多线程要认识多线程就要从操作系统的原理说起. 以前古老的DOS操作系统(V 6.22)是单任务的,还没有线程的概念,系统在每次只能做一件事情.比如你在copy东西的时候 ...
- AJPFX总结I/O流操作(二)
FileWriter:该类没有特有的方法只有自己的构造函数.该类特点在于1,用于处理文本文件.2,该类中有默认的编码表,3,该类中有临时缓冲.构造函数:在写入流对象初始化时,必须要有一个存储数据的目的 ...
- AndroidStudio中使用SVN
AndroidStudio中使用SVN提交项目 1.安装SVN,我选择使用TortoiseSVN-1.8.7.25475-x64-svn-1.8.9.msi(安装文件地址如下:http://downl ...