首页 > 其他分享 >2023 一月 刷题记录

2023 一月 刷题记录

时间:2023-01-01 15:13:38浏览次数:62  
标签:int 一月 long AcWing ++ while 2023 刷题 define

主要内容:算进+十天集训

1.1

简要题意:求二维平面的最大矩形。

考虑按行处理,显然以当前这一行(无论多底长)的举行一定是前几行没有枚举过的。

可以预处理出 \(f_{i,j}\) 表示 \(a_{i,j}\) 向上延伸的最大长度,此时问题转化为 AcWing 131. 直方图中最大的矩形,\(f\) 数组即为该题中的高度。

此时对于每一行跑单调栈即可,复杂度 \(O(nm)\)。

单调队列板子题,没什么好说的,但打代码过程中遇到了一个很有趣的问题。

我第一版代码是这么写的:

点击查看代码
#include<bits/stdc++.h>
#define ull unsigned long long
#define ll long long
#define pb push_back
#define pii pair<int,int>
#define vi vector<int>
#define imp map<int,int>
using namespace std;
const int N=1000006;
int n,k,a[N];
int q[N],h=0,t=1;
int main(){
	cin>>n>>k;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	for(int i=1;i<=n;i++){
		if(i-k+1>q[t]) t++;
		while(a[q[h]]>=a[i]&&t<=h) h--;
		q[++h]=i;
		if(i>=k) cout<<a[q[t]]<<" ";
	}
	cout<<endl;
	h=0,t=1;
	for(int i=1;i<=n;i++){
		if(i-k+1>q[t]) t++;
		while(a[q[h]]<=a[i]&&t<=h) h--;
		q[++h]=i;
		if(i>=k) cout<<a[q[t]]<<" ";
	}
	cout<<endl;
	return 0;
}

可是,这么写在 \(k=1\) 的数据下无法通过,而改为数组下标从 \(0\) 开始即可通过。

原因需要手动模拟才能发现。

看第一个循环的第一个 if 语句,当 \(k=1\) 时,\(i-k+1=1\),而此时的 \(q_t=0\),也就意味着,此时删除了一个原本就不存在的数,所以出现问题。而从0开始恰巧使其相等,规避了问题。

如果从一开始的话,将 \(q_0\) 初值设为无穷大即可。

标签:int,一月,long,AcWing,++,while,2023,刷题,define
From: https://www.cnblogs.com/victoryang-not-found/p/17018074.html

相关文章

  • 2023打算用博客园记录学习日常~
    找到了一个没有人看到的可以让我记录日常的地方吼吼吼先简单介绍一下985工科研一方向深度学习➕语义通信今年要去实习所以要补一下基础知识学一下应用技能喜欢看悬疑......
  • 新年快乐!体验Windows7黄金版,祝你2023财源广进!
    新年快乐!体验Windows7黄金版,祝你2023财源广进!首先,开机画面表示出它的土豪,并说明,它并不来自Microsoft。然后:它是2016年出现的。改成64位的。然后许可:自定义:选分......
  • 得到跨年演讲2023
    得到跨年演讲20232022-12-311法国作家福楼拜曾说:“一个人一生中最为辉煌的一天,并不是功成名就的那一天,而是从悲叹和绝望中产生对人生挑战的欲望,并勇敢迈向这种挑战的那......
  • 告别2022刚哥准备在2023年干几件大事
    告别20222022年,因为反反复复的疫情,节奏被打得支离破碎。在12月份,政策放开,羊了个羊,发烧后,突然被按下暂停键,也让我看清楚了很多事情。2022年整体比较平淡,没有特别明显的上升......
  • C++公司员工考勤管理系统[2023-01-01]
    C++公司员工考勤管理系统[2023-01-01]题目15“公司员工考勤管理系统设计”1、问题描述某公司需要存储雇员的编号、姓名、性别、所在部门,级别,并进行工资的计算。其中,雇......
  • 面试笔试刷题 C++ (持续更新)
    阅读C++语言代码输出()​​int​​​​main()​​​​{​​​​int​​​​arr[]={​​​​1​​......
  • 力扣每日一题2023.1.1---2351. 第一个出现两次的字母
    给你一个由小写英文字母组成的字符串s,请你找出并返回第一个出现两次的字母。注意:   如果a的第二次出现比b的第二次出现在字符串中的位置更靠前,则认为字母......
  • 按照这步骤来刷题,两个月你亦能成为王者
    公众号:bigsai回复「bigsai」领取pdf学习资源,回复「进群」一起打卡力扣成为王者前言最近很多小伙伴问我怎么入门数据结构与算法,又或者怎么刷题,很多人也说自己挺迷茫的。今......
  • 写在 2023 年的第一天
    今天是2023年的第一天,首先祝大家HappyNewYear。下面进行对2022年的总结,2022年无疑是我OI生涯中十分失败的一年。一直到暑假之前,日子过得浑浑噩噩,新算法也没学,......
  • 2022年终总结&2023目标
    2022年终总结&2023目标我才不会写这种东西呢,但是\(\rmpokefunc\)逼着我写,有什么办法呢。$——\rmfishmenomelon$有一部分数据被它删掉了,凑合看吧。年终总结切题......