【51Nod - 1215 】数组的宽度 (单调栈 或 分治 或 单调队列,算贡献,需去重)

题干:

N个整数组成的数组,定义子数组aii..ajj的宽度为:max(ai..aj) - min(ai..aj),求所有子数组的宽度和。

Input

第1行:1个数N,表示数组的长度。(1 <= N <= 50000) 
第2 - N + 1行:每行1个数,表示数组中的元素(1 <= Aii <= 50000)

Output

输出所有子数组的宽度和。

Sample Input

5
1
2
3
4
5

Sample Output

20

解题报告:

    这题显然不能枚举区间然后分别计算,所以很多技巧根本不需要考虑(比如排序一下?)

    然后我们考虑枚举每一个元素,计算他对答案的贡献。

    记得去重,也就是,一边算 严格单调,一边是 不严格单调,这样就可以保证不重不漏。(像 5 1 2 1 3 3 这样的样例,算贡献时(2,4)这种区间 只需要算一次。所以单调栈的时候一边是严格单调,一边是不严格单调)这个去重的方法很巧妙啊、

AC代码:

#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int MAX = 50000 + 5;
ll a[MAX],maxx[MAX],minn[MAX];
int l[MAX],r[MAX],L[MAX],R[MAX];//左侧第一个比我小的,右侧第一个比我小的。
stack<int> sk;
int main()
{int n;cin>>n;for(int i = 1; i<=n; i++) scanf("%lld",a+i);//从左到右找第一个比我小的,所以从左到右维护一个单调递增栈。for(int i = 1; i<=n; i++) {while(!sk.empty() && a[sk.top()] > a[i]) sk.pop();if(sk.size()) l[i] = sk.top();else l[i] = 0;sk.push(i);
//		printf("%d %d\n",i,l[i]);}while(!sk.empty()) sk.pop();//从右到左找第一个比我小的,所以维护从右向左维护一个单调递减栈。for(int i = n; i>=1; i--) {while(!sk.empty() && a[sk.top()] >= a[i]) sk.pop();if(sk.size()) r[i] = sk.top();else r[i] = n+1;sk.push(i);
//		printf("%d %d\n",i,r[i]);}for(int i = 1; i<=n; i++) minn[i] = (r[i] - i - 1) * (i-l[i]-1) + (r[i]-l[i]-1);while(!sk.empty()) sk.pop();//从左到右找第一个比我大的,所以从左向右维护一个单调递减栈,for(int i = 1; i<=n; i++) {while(!sk.empty() && a[sk.top()] < a[i]) sk.pop();if(sk.size()) L[i] = sk.top();else L[i] = 0;sk.push(i);}while(!sk.empty()) sk.pop();for(int i = n; i>=1; i--) {while(!sk.empty() && a[sk.top()] <= a[i]) sk.pop();if(sk.size()) R[i] = sk.top();else R[i] = n+1;sk.push(i);}for(int i = 1; i<=n; i++) maxx[i] = (R[i] - i-1) * (i-L[i]-1) + (R[i]-L[i]-1);
//	printf("yingyingying\n");
//	for(int i = 1; i<=n; i++) {
//		printf("%lld %lld\n",minn[i],maxx[i]);
//	}ll ans = 0;for(int i = 1; i<=n; i++) {ans += a[i] * (maxx[i] - minn[i]);}printf("%lld\n",ans);return 0;
}

 

 

还有几个好的题解:(暂时还未看)

http://www.itdaan.com/blog/2017/09/18/fb224770ef3801dcce5fcac76c36b4df.html

http://www.itdaan.com/blog/2017/08/22/df09138e3e52fc862172e8c8875d95ff.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/441562.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

云昆明理工大学 计算机复试,2012年昆明理工大学计算机考研复试试题(回忆版)...

2012年昆明理工大学计算机考研复试试题(年昆明理工大学计算机考研复试试题(回忆版)回忆版)本试题由http://doc.xuehai.net网友kenden23提供笔试C(总共30分)一、40题选择题(20分)1.派生类调用构造函数时&#xff0c;基类的构造函数先调用&#xff1b;2. int a1,b1,c1,d1,e1;if((…

*【CodeForces - 122C 】Lucky Sum (bfs记录状态,二分查找,有坑)(或分块)

题干&#xff1a; Petya loves lucky numbers. Everybody knows that lucky numbers are positive integers whose decimal representation contains only the lucky digits 4 and 7. For example, numbers 47, 744, 4 are lucky and 5, 17, 467 are not. Let next(x) be the…

模拟量使用计算机电缆,DJYPVRP计算机电缆型号规格

计算机电缆用途&#xff1a;本产品适用于额定电压30/500v及以下防干扰性能要求较高的电子计算机、检测仪器、仪表的连接。使用条件&#xff1a; 计算机电缆(电压等级&#xff1a;0.45/0.75KV&#xff0c;企标)本产品使用于交流额定电压为300/500及以下&#xff0c;对于防干扰性…

【CodeForces - 155C】Hometask (字符串,思维,贪心,熟悉句式)(总结)

题干&#xff1a; Sergey attends lessons of the N-ish language. Each lesson he receives a hometask. This time the task is to translate some sentence to the N-ish language. Sentences of the N-ish language can be represented as strings consisting of lowercas…

html 报表插件,轻量级图形报表插件JSCharts

插件描述&#xff1a;JScharts是一个用于在浏览器直接绘制图表的JavaScript工具包。JScharts支持柱状图、圆饼图以及线性图&#xff0c;可以直接将这个图插入网页&#xff0c;JScharts图的数据可以来源于XML文件、JSON文件或JavaScript数组变量。2017-05-09更新&#xff1a;改为…

算法讲解 -- 二分图之 匈牙利算法

匈牙利算法是由匈牙利数学家Edmonds于1965年提出&#xff0c;因而得名。匈牙利算法是基于Hall定理中充分性证明的思想&#xff0c;它是部图匹配最常见的算法&#xff0c;该算法的核心就是寻找增广路径&#xff0c;它是一种用增广路径求二分图最大匹配的算法。 -------等等&…

html 表格文字颜色 css,CSS 表格-JavaScript中文网-JavaScript教程资源分享门户

使用 CSS 可以使 HTML 表格更美观。CompanyContactCountryAlfreds FutterkisteMaria AndersGermanyBerglunds snabbkpChristina BerglundSwedenCentro comercial MoctezumaFrancisco ChangMexicoErnst HandelRoland MendelAustriaIsland TradingHelen BennettUKKniglich EssenP…

计算机专业表白文案,深情表白文案40句

深情表白文案40句时间&#xff1a;2020-05-17 22:41:51 分类&#xff1a;经典语句 | 适合表白的句子 | Word文档下载深情表白文案40句导语&#xff1a;你是我生活的全部&#xff0c;是我一生拼搏奋斗的赌注。为了你披荆斩棘&#xff0c;为了你艰辛受苦&#xff0c;为了你众生…

【HRBUST - 1054 】Brackets! Brackets! (括号匹配,思维,STL栈)

题干&#xff1a; There are six kinds of brackets: ‘(‘, ‘)’, ‘[‘, ‘]’, ‘{’, ‘}’. dccmx’s girl friend is now learning java programming language, and got mad with brackets! Now give you a string of brackets. Is it valid? For example: “(([{}]))…

计算机中有关数及编码的知识,计算机中有关数及编码的知识

计算机中有关数及编码的知识1.计算机是智能化的电器设备计算机就其本身来说是一个电器设备&#xff0c;为了能够快速存储、处理、传递信息&#xff0c;其内部采用了大量的电子元件&#xff0c;在这些电子元件中&#xff0c;电路的通和断、电压高低&#xff0c;这两种状态最容易…

ACM技巧 - O(1)快速乘(玄学) 总结

ll fast_mult(ll a,ll b,ll mod) {return (a*b - (ll)((long double)a/mod*b)*modmod)%mod; } 参考&#xff1a;https://blog.csdn.net/m0_38013346/article/details/81435369 注意事项&#xff1a; double可能会挂&#xff0c;最好long double。u,v>p可能会挂&#xff0…

html盒子阴影只设置左右,只在容器一边或两边显示盒子阴影

实现方案首先定义一个有具体宽高的盒子&#xff0c;然后正确定位:after伪类。效果[图片上传中...(image.png-8e8e17-1593570486291-0)]底部阴影代码:Document.box-shadow {background-color: #FF8020;width: 160px;height: 90px;position: relative;}.box-shadow:after {conten…

【 HRBUST - 1055】Single(模拟,dp,打表)(总结)

题干&#xff1a; There are many handsome single boys in our team, for example, me. Some times, we like count singles. For example, in the famous “November 11th” (11.11), there are four singles ,so, single is actually 1. For another example, there are 2 …

一年级下册数学计算机应用题,【小学一年级数学练习题】小学生和机器人

【www.jmzhongda.cn--学生个人工作总结】一个小学生在认真地做作业。这是一系列加、减、乘、除的四则应用计算题&#xff0c;难度相当大&#xff0c;特别那几个繁分数题&#xff0c;计算起来太繁杂。他额头上不知不觉地渗出细雨般的汗珠来了。正在这个时候&#xff0c;不知从什…

【EOJ Monthly 2018.10 - A】oxx 的小姐姐们(模拟,水题,填充矩阵,输出格式有坑)

题干&#xff1a; Time limit per test: 1.0 seconds Memory limit: 512 megabytes oxx 和他的小姐姐&#xff08;们&#xff09;躺在图书馆前的大草坪上看星星。 有强迫症的 oxx 想要使得他的小姐姐们正好躺成一块 nm 的长方形。 已知小姐姐的形状是 1p 的长方形&#xf…

数据结构数组计算机中的应用,2018考研计算机:数据结构数组和广义表复习重点...

2018考研计算机&#xff1a;数据结构数组和广义表复习重点2017-08-17 16:00|考研集训营《数据结构(C语言版)》复习重点在二、三、六、七、九、十章&#xff0c;考试内容两大类&#xff1a;概念&#xff0c;算法&#xff0c;自从计算机专业课统考以后&#xff0c;专业课考试题型…

【HDU - 5672】String(尺取法)

题干&#xff1a; There is a string SS.SS only contain lower case English character.(10≤length(S)≤1,000,000)(10≤length(S)≤1,000,000) How many substrings there are that contain at least k(1≤k≤26)k(1≤k≤26) distinct characters? Input There are mul…

【HDU - 2030 】汉字统计 (C语言汉字编码,长知识)

题干&#xff1a; 统计给定文本文件中汉字的个数。 Input 输入文件首先包含一个整数n&#xff0c;表示测试实例的个数&#xff0c;然后是n段文本。 Output 对于每一段文本&#xff0c;输出其中的汉字的个数&#xff0c;每个测试实例的输出占一行。 [Hint:]从汉字机内码的…

【HDU - 1257】最少拦截系统 (标解dp,贪心可过,最长上升子序列类问题)

题干&#xff1a; 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能超过前一发的高度.某天,雷达捕捉到敌国的导弹来袭.由于该系统还在试用阶段,所以只有一套系统,因此有可能…

ae toolbarcontrol运行时没有_想办法让AE跑起来

好像大家都已经习惯了ADOBE系列软件的高能量吸收&#xff0c;谁让人家功能强大呢&#xff0c;尤其是AE&#xff0c;发展势头越来越猛&#xff0c;目前可以直接生成JSON文件&#xff0c;解析为代码文件后跨平台使用于安卓和苹果设备上&#xff0c;算是直接搭上了火热的移动互联快…