题解 | #随机序列#

齐齐排序

https://ac.nowcoder.com/acm/problem/21439

#include <iostream>
#include <algorithm>
#include <vector>
#include <utility>
#define fi first
#define se second

using namespace std;

const int N = 2e5 + 10;

int a[N];
int x[N], t[N];
vector<pair<int, int>> st;

int main() {
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	
	int n, m; cin >> n >> m;
	for(int i = 1; i <= n; i++) cin >> a[i];
	for(int i = 1; i <= m; i++) cin >> t[i] >> x[i];
	
	int mx = 0;
	// 对于数组a, [1, x[maxi]] 排序完之后,得再排序 [1, x[se-maxi]], 然后再排 [1, x[th-maxi]],以此类推。
	// 会发现从前往后找,对于数组x, 要先遍历区间[1, m], 找到 max,再记录下 maxi,再将 mx 归 0。然后再遍历区间[maxi + 1, m],再找一个最大值 se-max,再把下标 se-maxi 记录下来,然后再遍历[se-maxi + 1, m], 一直不断遍历下去,有点像归并排序只处理右孩子区间一样,时间复杂度肯定超 O(N)了。
	// 但从后往前找,对于数组x,mx 就不用归 0, 找的时候,先把 x[m]赋给 mx, (a[x[m]]在后续操作中会在最后一次排序操作中被单独排序),再把 x[m] 记录下来,往前遍历,如果x[i] <= mx, 说明在数组a中[1, x[i]]的元素排序操作会被 sort(a + 1, a + mx + 1) 或 sort(a + 1, a + mx + 1, greater<int>()) 覆盖掉;如果 x[i] > mx,说明在数组a中[1, x[i]]包括的元素要比[1, mx]还要多,记录下来,放到倒数第二次排序,继续往前遍历。只需遍历一遍,就把需要排序的区间给倒着存好了,时间复杂度为 O(N)。
	for(int i = m; i >= 1; i--) {
		if(mx < x[i]) {
			st.push_back({t[i], x[i]});
			mx = x[i];
		}
	}
	
	for(int i = st.size() - 1; i >= 0; i--) {
		int t = st[i].fi, x = st[i].se;
		if(t == 1) sort(a + 1, a + x + 1);
		else sort(a + 1, a + x + 1, greater<int>());
	}
	
	for(int i = 1; i <= n; i++) cout << a[i] << " ";
	
	return 0;
}
// 附:x[maxi]为数组x在[1, m]范围内元素最大值,x[se-maxi]为数组x在[maxi + 1, m]元素最大值,x[th-maxi]为数组x在[se-maxi, m]元素最大值,以此类推。
全部评论

相关推荐

暴杀流调参工作者:春招又试了一些岗位,现在投递很有意思,不仅要精心准备简历,投递官网还得把自己写的东西一条一条复制上去,阿里更是各个bu都有自己的官网,重复操作无数次,投完简历卡完学历了,又该写性格测评、能力测评,写完了又要写专业笔试,最近还有些公司搞了AI辅助编程笔试,有些还有AI面试,对着机器人话也听不明白录屏硬说,终于到了人工面试又要一二三四面,小组成员面主管面部门主管面hr面,次次都没出错机会,稍有不慎就是挂。 卡学历卡项目卡论文卡实习什么都卡,没有不卡的😂
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
正在热议
更多
# 春招至今,你的战绩如何? #
10468次浏览 92人参与
# 你的实习产出是真实的还是包装的? #
1848次浏览 42人参与
# 米连集团26产品管培生项目 #
5923次浏览 215人参与
# 军工所铁饭碗 vs 互联网高薪资,你会选谁 #
7554次浏览 43人参与
# 简历第一个项目做什么 #
31654次浏览 334人参与
# 重来一次,我还会选择这个专业吗 #
433430次浏览 3926人参与
# 巨人网络春招 #
11323次浏览 223人参与
# 当下环境,你会继续卷互联网,还是看其他行业机会 #
187091次浏览 1122人参与
# 牛客AI文生图 #
21422次浏览 238人参与
# 不考虑薪资和职业,你最想做什么工作呢? #
152343次浏览 888人参与
# 研究所笔面经互助 #
118893次浏览 577人参与
# 简历中的项目经历要怎么写? #
310201次浏览 4208人参与
# AI时代,哪些岗位最容易被淘汰 #
63614次浏览 817人参与
# 面试紧张时你会有什么表现? #
30503次浏览 188人参与
# 你今年的平均薪资是多少? #
213067次浏览 1039人参与
# 你怎么看待AI面试 #
180017次浏览 1249人参与
# 高学历就一定能找到好工作吗? #
64324次浏览 620人参与
# 你最满意的offer薪资是哪家公司? #
76480次浏览 374人参与
# 我的求职精神状态 #
448036次浏览 3129人参与
# 正在春招的你,也参与了去年秋招吗? #
363361次浏览 2638人参与
# 腾讯音乐求职进展汇总 #
160633次浏览 1111人参与
# 校招笔试 #
470822次浏览 2964人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务