求时间复杂度分析
查看原帖
求时间复杂度分析
704275
无名之雾楼主2024/10/23 14:46

写了一个自以为是 O(n×m1+n×m2)O(n\times m1+n\times m2) 的做法。

但是很奇怪的直接就过了?

#include<bits/stdc++.h>
using namespace std;
#define int long long
inline int read(){
   int s=0,w=1;
   char ch=getchar();
   while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
   while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();
   return s*w;
}
inline void write(int x){
    if(x==0){putchar('0');return;}
	int len=0,k1=x,c[10005];
	if(k1<0)k1=-k1,putchar('-');
	while(k1)c[len++]=k1%10+'0',k1/=10;
	while(len--)putchar(c[len]);
}
const int N=1e5+5;
struct node{
	int s,e;
	const bool operator <(const node &x)const{return x.s>s;}
}a[N],b[N];
struct Node{int val,lst;}sum1[N],sum2[N];
signed main(){
	int n=read(),m1=read(),m2=read();
	if(n>=m1+m2){cout<<m1+m2;return 0;}
	for(int i=1;i<=m1;i++)a[i].s=read(),a[i].e=read(); 
	for(int i=1;i<=m2;i++)b[i].s=read(),b[i].e=read();
	sort(a+1,a+m1+1),sort(b+1,b+m2+1); 
	for(int i=1;i<=m1;i++){
		for(int j=1;j<=n;j++){
			if(sum1[j].lst<=a[i].s){sum1[j].val++,sum1[j].lst=a[i].e;break;}
		}
	}
	for(int i=1;i<=n;i++)sum1[i].val+=sum1[i-1].val;
//	for(int i=1;i<=n;i++)cout<<sum1[i].val<<" ";
	for(int i=1;i<=m2;i++){
		for(int j=1;j<=n;j++){
			if(sum2[j].lst<=b[i].s){sum2[j].val++,sum2[j].lst=b[i].e;break;}
		}
	}
	for(int i=1;i<=n;i++)sum2[i].val+=sum2[i-1].val;
	int cnt=0; 
	for(int i=0;i<=n;i++)cnt=max(cnt,sum1[i].val+sum2[n-i].val);
	cout<<cnt;
	return 0;
}

求大佬分析。

2024/10/23 14:46
加载中...