Problem(problem.pas/c/cpp)
题目描述
众所周知, Pb 是位大神犇,时不时就去 BZOJ 啊 codeforces 啊什么的玩玩,
这次无聊刷(nue)题的时候看到了一道奇怪的题目:
给你一个数 n 和有 n 个非负整数的数组 a , 求
Max{(j- i+1)*Min{a[k]| (i<=k<= j)}| (1<=i<=n,i<= j<=n)}
题目如此简短, Pb 神犇很快就看完了,看完之后大呼一声:“水题!”不出 5min就把这题给秒了,于是对出题人说:“快来秒这道水题!”
然而出题人是个 SB,显然没有 Pb 那么神,完全做不出,所以请你来帮忙咯。
输入格式
一个整数 n。
接下来一行,共 n 个非负整数,代表 a 数组。
输出格式
输出应该只有一个非负整数,代表答案。
样例输入
1 3
样例输出
3
数据范围
对于 10%的数据, 1<=n<=2000
对于 20%的数据, 1<=n<=500000
对于另 30%的数据, n=4000000,保证 a 数组是非严格递增或非严格递减
对于 100%的数据, 1<=n<=4000000, 0<a[i]<=1000000000
1 |
|
题解:
用单调栈来维护一个单调上升序列,每当当前元素小于栈顶元素,更新答案并弹出栈顶。
Tents(tents.pas/c/cpp)
问题描述
Pb 去郊游啦!他来到一块空地打算在这里搭一个帐篷。
但是,帐篷的四个支撑点不能在落在任何位置上,而只能落在一些固定点上。
现在,他找到地面上有 N 个点可以支撑帐篷。(四个支撑点必须围成一个矩形)
他想知道依次每加多一个点,搭帐篷的方法数。
输入格式
第 1 行:一个整数 N
第 2 行至 N +1 行:每行有两个整数的 x, y 作为一个点的坐标。
输出格式
共 N 行: 第 i 行表示当前加入第 i 个点后可以搭帐篷的方案数。
样例输入
8
1 2
1 -2
2 1
2 -1
-1 2
-1 -2
-2 1
-2 -1
样例输出
0
0
0
0
0
1
3
6
样例解释
最后的答案是( 1,2,6,5),(1,3,6,8),(1,4,6,7),( 2,3,5,8),(2,4,5,7),( 3,4,8,7)
数据范围
对于 50%的数据 4<=N<=100.
对于 100%的数据 4<=N<=1,000.
所有的 x,y 都不会超过 16,000。所有点都是不同的。
1 |
|
但是本蒟蒻实在不会用迭代器,于是用大根堆去实现了一遍
1 |
|
题解:
其实无论是set还是qriority_queue,解这道题的思路都是一样的。只要a[1~n]中,有一个值大于m/2,就无解,否者有解,一有大于m/2,就输出,其他保证输出最小的数即可。
用三个变量last,low,up分别记录上一个输出,最小可用,以及紧挨着low的可用值。分三种情况讨论输出。
本文作者:
syrsteven
最后更新: 2023年09月02日 04:06:21
本文链接: http://syrsteven.github.io/post/bd619c1f.html
版权声明: 本作品采用 CC BY-NC-SA 4.0 许可协议进行许可,转载请注明出处!
最后更新: 2023年09月02日 04:06:21
本文链接: http://syrsteven.github.io/post/bd619c1f.html
版权声明: 本作品采用 CC BY-NC-SA 4.0 许可协议进行许可,转载请注明出处!