蓝桥杯 历届真题 双向排序【第十二届】【省赛】【C组】

资源限制

内存限制:256.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s

改了半天只有60分,还是超时,还不知道怎么写,后面再看吧┭┮﹏┭┮

cpp 复制代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1e6+10;
int n,m,t,d;
int a[N],b[N];
string s; 
signed main(){
	cin>>n>>m;
	for(int i=0;i<n;i++){
		a[i]=i+1;
	}
	int p,q,last_0=0,last_1=n;
	int flag=-1;
	for(int i=0;i<m;i++){
		cin>>p>>q;
		if(i==0){
			if(p==0){
				last_0=q;
				flag=0;
			}
			else{
				last_1=q;
				flag=1;
			}
		}else{
			if(p==0){
				if(flag==1){
					sort(a+last_1-1,a+n);
					last_1=n;	
				}
				last_0=max(last_0,q);
				flag=0;
				
			}else{
				if(flag==0){
					sort(a,a+last_0,greater<int>());
					last_0=0;	
				}
				last_1=min(last_1,q);
				flag=1;	
			}
		}
	}
	if(flag==0){
		sort(a,a+last_0,greater<int>());
	}else{
		sort(a+last_1-1,a+n);
	}
	
	for(int i=0;i<n;i++){
		cout<<a[i]<<" ";
	}
	
	return 0;
}

看别人代码发现自己只考虑了两种情况:

一、输入为连续的0,那么最大的q生效,作为排序右边界;

二、输入为连续的1,那么最小的q生效,作为排序左边界;

还应该有:

  • 交替输入且第一次输入0,第二次1,第三次0,且第三次q比第一次大,那么前两次作废;
  • 交替输入且第一次输入1,第二次0,第三次1,且第三次q比第一次小,那么前两次作废;
相关推荐
Murphy_lx9 分钟前
C++ thread类
开发语言·c++
月夜的风吹雨9 分钟前
【C++ STL 深度剖析】:vector 底层模拟实现与核心陷阱解析
c++·vector·类和对象·visual studio
彩妙不是菜喵17 分钟前
C++ 中 nullptr 的使用与实践:从陷阱到最佳实践
开发语言·jvm·c++
蒙奇D索大27 分钟前
【算法】递归的艺术:从本质思想到递归树,深入剖析算法的性能权衡
经验分享·笔记·算法·改行学it
逐步前行35 分钟前
C数据结构--排序算法
c语言·数据结构·排序算法
王哈哈^_^37 分钟前
【数据集+完整源码】水稻病害数据集,yolov8水稻病害检测数据集 6715 张,目标检测水稻识别算法实战训推教程
人工智能·算法·yolo·目标检测·计算机视觉·视觉检测·毕业设计
light_in_hand1 小时前
内存区域划分——垃圾回收
java·jvm·算法
小安同学iter2 小时前
SQL50+Hot100系列(11.7)
java·算法·leetcode·hot100·sql50
_dindong2 小时前
笔试强训:Week-4
数据结构·c++·笔记·学习·算法·哈希算法·散列表
星释2 小时前
Rust 练习册 :Nucleotide Codons与生物信息学
开发语言·算法·rust