TLE求助
查看原帖
TLE求助
856004
Grammar_hbw楼主2024/12/27 16:37

这个代码不应该是O(klogk)O(k \log k)的吗

#include <bits/stdc++.h>
#pragma GCC optimize(3,"Ofast","inline")
using namespace std;
const int N=100007;
struct node{
	int idx,x,y;
	bool operator<(const node o)const{
		if(y!=o.y) return y<o.y;
		return x>o.x;
	}
} a[N],b[N];
int cnt,ans[N];
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	int t;
	cin>>t;
	while(t-->0){
		int n,m,k;
		cin>>n>>m>>k;
		for(int i=1;i<=k;i++) ans[i]=0,a[i].idx=i,cin>>a[i].x>>a[i].y;
		sort(a+1,a+k+1);
		cnt=0;
		for(int i=1;i<=k;i++) if(a[i].x>b[cnt].x&&a[i].y>b[cnt].y) b[++cnt]=a[i];
		b[cnt+1]={0,n+1,m+1};
		long long sum=0;
		for(int i=1;i<=cnt;i++) sum+=1ll*(b[i].y-1)*(b[i].x-b[i-1].x);
		sum+=1ll*m*(n-b[cnt].x);
		if(cnt==1) ans[b[1].idx]=1ll*n*m-sum;
		else for(int i=1;i<=cnt;i++) ans[b[i].idx]=1ll*(b[i+1].y-b[i].y)*(b[i].x-b[i-1].x);
		cout<<sum<<'\n';
		for(int i=1;i<=k;i++) cout<<ans[i]<<" \n"[i==k];
	}
}
2024/12/27 16:37
加载中...