T183637-变异距离(2021 CoE III C)【单调栈】
正题
题目链接:https://www.luogu.com.cn/problem/T183637
题目大意
给出\(n\)个二元组\((x_i,y_i)\),求最大的
\]
\(1\leq n\leq 2\times 10^6,-10^6\leq x_i\leq 10^6,-10^9\leq y_i\leq 10^9,1\leq T\leq 10\)
解题思路
昨天出去了所以没打比赛,这个算法是那个时候口胡的。
首先时间复杂度显然不能带\(log\),但是注意到\(x\)的范围,这是在告诉我们可以拿\(x\)去排序。
\(x\)排好序之后,我们发现对于一个位置\(j\),我们寻找一个\(i<j\)使得答案最大那么显然\(i\)要在从前往后的单调队列里。
这个其实启示了我们,我们可以前后各维护一个单调栈然后在两个栈里面搞。
至于搞法不难发现决定因素是最小的那个,所以我们每次把小的那个弹出顶部就好了。
时间复杂度\(O(n)\)。
然后交上去\(T\)了好多发,以为是常数的问题,结果换成题解的做法还是\(T\)了。
最后发现快读还不够,要用那个文件的黑科技读入,出题人真有你的

code
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#include<cctype>
#define ll long long
using namespace std;
const int N=2e6+10;
int T,n,a[N],sp[N],ss[N],tp,ts;
long long ans;
inline char Getchar()
{
static char buf[100000],*p1=buf+100000,*pend=buf+100000;
if(p1==pend)
{
p1=buf; pend=buf+fread(buf,1,100000,stdin);
if (pend==p1) return -1;
}
return *p1++;
}
inline int read()
{
char c;int d=1;int f=0;
while(c=Getchar(),!isdigit(c))if(c==45)d=-1;f=(f<<3)+(f<<1)+c-48;
while(c=Getchar(),isdigit(c)) f=(f<<3)+(f<<1)+c-48;
return d*f;
}
void GetAns(int i,int j)
{ans=max(ans,1ll*(i-j)*min(a[i],a[j]));}
signed main()
{
T=read();
while(T--){
n=read();ans=0;
memset(a,0,sizeof(a));
for(int i=1;i<=n;i++){
int x=read()+1e6,y=read();
a[x]=max(a[x],abs(y));
}
ts=tp=0;
for(int i=0;i<=2e6;i++){
if(!a[i])continue;
while(ts>0&&a[i]>=a[ss[ts]])ts--;
ss[++ts]=i;
}
for(int i=2e6;i>=0;i--){
if(!a[i])continue;
while(tp>0&&a[i]>=a[sp[tp]])tp--;
sp[++tp]=i;
}
int hp=1,hs=1;
while(ts&&tp){
GetAns(ss[ts],sp[tp]);
if(ts>0&&a[ss[ts]]<=a[sp[tp]])ts--;
else tp--;
}
printf("%lld\n",ans);
}
return 0;
}
T183637-变异距离(2021 CoE III C)【单调栈】的更多相关文章
- 2016 大连网赛---Function(单调栈)
题目链接 http://acm.split.hdu.edu.cn/showproblem.php?pid=5875 Problem Description The shorter, the simpl ...
- Code Forces Gym 100971D Laying Cables(单调栈)
D - Laying Cables Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u ...
- 洛谷.5300.[GXOI/GZOI2019]与或和(单调栈)
LOJ BZOJ 洛谷 想了一个奇葩的单调栈,算的时候要在中间取\(\min\),感觉不靠谱不写了=-= 调了十分钟发现输出没取模=v= BZOJ好逗逼啊 题面连pdf都不挂了 哈哈哈哈 枚举每一位. ...
- LeetCode Monotone Stack Summary 单调栈小结
话说博主在写Max Chunks To Make Sorted II这篇帖子的解法四时,写到使用单调栈Monotone Stack的解法时,突然脑中触电一般,想起了之前曾经在此贴LeetCode Al ...
- 算法进阶面试题02——BFPRT算法、找出最大/小的K个数、双向队列、生成窗口最大值数组、最大值减最小值小于或等于num的子数组数量、介绍单调栈结构(找出临近的最大数)
第二课主要介绍第一课余下的BFPRT算法和第二课部分内容 1.BFPRT算法详解与应用 找到第K小或者第K大的数. 普通做法:先通过堆排序然后取,是n*logn的代价. // O(N*logK) pu ...
- bzoj4237: 稻草人 cdq分治 单调栈
目录 题目链接 题解 代码 题目链接 bzoj4237: 稻草人 题解 暴力统计是n^2的 考虑统计一段区间对另一端的贡献 对于y值cdq分治,降调一维 对于当前两个分治区间统计上面那部分对下面那部分 ...
- [CF1083D]The Fair Nut’s getting crazy[单调栈+线段树]
题意 给定一个长度为 \(n\) 的序列 \(\{a_i\}\).你需要从该序列中选出两个非空的子段,这两个子段满足 两个子段非包含关系. 两个子段存在交. 位于两个子段交中的元素在每个子段中只能出现 ...
- 【POJ2796】Feel Good 单调栈
题目大意:给定一个长度为 N 的序列,求任意区间 [ l , r ] 中最小的\(min\{v[i],i\in[l,r] \}*\Sigma_{i=l}^rv[i]\). 题解:这是一道具有标准单调栈 ...
- poj 2059 单调栈
题意:求柱状图中最大矩形面积. 单调栈:顾名思义就是栈内元素单调递增的栈. 每次插入数据来维护这个栈,假设当前须要插入的数据小于栈顶的元素,那就一直弹出栈顶的元素.直到满足当前须要插入的元素大于栈顶元 ...
随机推荐
- SpringBoot枚举传参
创建一个接口所有枚举继承 package com.gecko.charging.common; public interface BaseEnum { Integer getCode(); } 具体的 ...
- Specification使用notin
废话不多说直接贴代码 Specification<Employee> employeeSpecification = new Specification<Employee>() ...
- SpringBoot整合mybatis快速入门
一.创建一个SpringBoot项目 二.引入相关依赖 <!--web核心依赖--> <dependency> <groupId>o ...
- 梦琪小生 【转】【WPF】WPF MVVM 简单实例
1 新建WPF 应用程序WPFMVVMExample 程序结构如下图所示. 2 Model实现 在Model文件夹下新建业务类StudentModel(类文件StudentModel.cs),类的详细 ...
- 【IDE】Sublime Text 3 使用配置
1 安装 首先现在安装Sublime Text 3,直接官网下载(http://www.sublimetext.com/3),也可以在其他地方下载,安装完成后进行破解 菜单栏Help - Enter ...
- 老鼠走迷宫II
转自:http://blog.csdn.net/holymaple/article/details/8636234 由于迷宫的设计,老鼠走迷宫的入口至出口路径可能不止一条,如何求出所有的路径呢? 解法 ...
- 自建纯净谷歌搜索「GitHub 热点速览 v.21.35」
作者:HelloGitHub-小鱼干 虽然 Google 搜索的结果不如百度搜索结果那般广告丛生,但是对于一心只想找到匹配结果的我们而言,推广的信息条目能免则免.whoogle-search 便是一个 ...
- redis 《scan命令》
此命令十分奇特建议参考文档:http://redisdoc.com/database/scan.html#scan 222222222222222并非每次迭代都要使用相同的 COUNT 值. ...
- JobExecutionContext中的JobDataMapjob与Detail与Trigger中的JobDataMapjob
public static void main(String[] args) { //配置模式 build模式 //1.实例一个JOB JobDetail jobDetail = JobBuilder ...
- 使用栅格系统开发响应式页面——logo+nav实例
小屏时: 中屏及以上时: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...