尝试使用离散化与查分但是失败
查看原帖
尝试使用离散化与查分但是失败
1063896
Mickey_miqi楼主2023/10/5 14:05
#include <bits/stdc++.h>
using namespace std;
int s, n, x[2005], y[2005], X[2005], Y[2005], mapx[2005], mapy[2005], a[2005][2005];
void f(int x, int y, int xx, int yy){
//	f(mapx[2*i-1], mapy[2*i], mapx[2*i], mapy[2*i-1])
	a[x][y]++;
	a[xx+1][y]--;
	a[x][yy+1]--;
	a[xx+1][yy+1]++;
}
int main()
{

	cin >> n;
	for (int i = 1; i <= 2*n; i++){
		cin >> x[i] >> y[i];
		X[i] = x[i];
		Y[i] = y[i];
	}
	sort(X+1,X+2*n+1);
	sort(Y+1,Y+2*n+1);
	int k1 = unique(X+1,X+2*n+1)-(X+1);
	int k2 = unique(Y+1,Y+2*n+1)-(Y+1);
	for (int i = 1; i <= k1; i++){
		mapx[i] = lower_bound(X+1,X+k1+1,x[i])-X;
	}
	for (int i = 1; i <= k2; i++){
		mapy[i] = lower_bound(Y+1,Y+k2+1,y[i])-Y;
	}
	for (int i = 1; i <= n; i++){
		f(mapx[2*i-1], mapy[2*i], mapx[2*i], mapy[2*i-1]);
	}
	for (int i = 1; i <= 2*n; i++){
		for (int j = 1; j <= 2*n; j++){
			a[i][j] += a[i-1][j] + a[i][j-1] -a[i-1][j-1];
		}
	}
	for (int i = 1; i <= k1-1; i++){
		for (int j = 1; j <= k2-1; j++){
			if (a[i][j]&&a[i+1][j]&&a[i][j+1]&&a[i+1][j+1]){
				s += (X[i+1]-X[i]) * (Y[j+1]-Y[j]);
			}
		}
	}
	cout << s;
	return 0;
}

使用该代码只有#1对 请问大佬:这样的离散化可以吗?

2023/10/5 14:05
加载中...