一种奇怪的方法?
查看原帖
一种奇怪的方法?
50787
zzzty___楼主2021/2/5 00:41

已AC,但感觉时间复杂度不太对,有大佬能帮忙分析一下时间复杂度吗

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+5;
long long n,ans=0,lx[maxn],ly[maxn],rx[maxn],ry[maxn];
void upfloat(long long llx,long long lly,long long urx,long long ury,int cur)
{
	while(cur<=n&&(llx>=rx[cur]||lly>=ry[cur]||urx<=lx[cur]||ury<=ly[cur])) cur++;
	if(cur>n)
	{
		ans+=(urx-llx)*(ury-lly);
		return;
	}
	if(llx<lx[cur]&&lx[cur]<urx) upfloat(llx,lly,lx[cur],ury,cur+1),llx=lx[cur];
	if(lly<ly[cur]&&ly[cur]<ury) upfloat(llx,lly,urx,ly[cur],cur+1),lly=ly[cur];
	if(llx<rx[cur]&&rx[cur]<urx) upfloat(rx[cur],lly,urx,ury,cur+1),urx=rx[cur];
	if(lly<ry[cur]&&ry[cur]<ury) upfloat(llx,ry[cur],urx,ury,cur+1),ury=ry[cur];
}
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
		cin>>lx[i]>>ly[i]>>rx[i]>>ry[i];
	ans=(rx[n]-lx[n])*(ry[n]-ly[n]);
	for(int i=n-1;i>=1;i--)
		upfloat(lx[i],ly[i],rx[i],ry[i],i+1);
	cout<<ans<<endl;
	return 0;
}
2021/2/5 00:41
加载中...