没有被选中的区间RE21求调

image
RE代码

#include<bits/stdc++.h>
using namespace std;
long long n,m;
unordered_multiset<int>st; 
int a[100005],l[100005],r[100005],mx=0;
int main(){
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		cin>>l[i]>>r[i];
		for(int j=l[i];j<=r[i];j++){
			st.insert(j);
		}
	}
	
	for(int i=1;i<=m;i++){
		unordered_multiset<int> st1;
		st1=st;
		for(int j=l[i];j<=r[i];j++){
			st1.erase(st1.find(j));
		}
		unordered_set<int>st2;
		for(auto i:st1){
			st2.insert(i);
		}
//		for(auto i:st1)
//			cout<<i<<" ";
//		
//		cout<<endl;
		a[i]=st2.size();
		if(a[i]>=a[mx]){
			mx=i;
		}
	}
	cout<<mx<<" "<<n-a[mx];
	return 0;
}

到底为什么RE啊!

2 个赞

放一下完整的题面

1 个赞

2. 没有被选中的区间

题目ID:8467拓展题100分

最新提交:

Runtime Error

21 分

历史最高:

Runtime Error

21 分

时间限制: 1000ms

空间限制: 262144kB

题目描述

时间:1s 空间:256M

题目描述:

数轴上有 n 个点,编号为 1n

小信有 m 个区间,区间可能有重叠。小信要选出 m−1 个区间覆盖尽可能多的点。在这之后,小信想知道没被覆盖的点的数量,以及没有选中的区间的编号,如果有多个满足条件的区间,输出最大的那个。

输入格式:

第一行包含两个整数 n , m

接下来 m 行,每行包含两个整数 L_i ​, R_i

输出格式:

输出两个整数,第一个整数表示没有被选中的区间编号,如果有多个满足条件的区间,输出最大的那个,编号从 1 开始;第二个数表示没有被覆盖的点的数量。

样例1输入:

10 4 
1 6 
4 9 
3 4 
5 8

样例1输出:

4 1

约定:

对于 100\% 的数据, 1 \le n,m \le 10^5 , 1≤L_i​≤R_i​≤n

对于样例1:

不选择第 1 个区间,有 3 个点没有被覆盖到,分别是 [1,2,10]

不选择第 2 个区间,有 2 个点没有被覆盖到,分别是 [9,10]

不选择第 3 个区间,有 1 个点没有被覆盖到,分别是 [10]

不选择第 4 个区间,有 1 个点没有被覆盖到,分别是 [10]

所以不选择 3 或者 4 区间,没被覆盖到的点数最小,都是 1

你这个代码时间复杂度是错的吧

\LaTeX 帮你改过来了

1 个赞

还是建议发图片,直接复制 \LaTeX 会炸

1 个赞

好的