题意:求矩阵面积并(注意坐标是浮点)
题解:因为坐标是浮点,所以需要离散化。然后重点在于离散化之后的工作,即把每条矩形看成两条线段,从下往上扫描。每次扫到矩形的下边就把区间+1,上边为区间-1,然后每次的面积就是非零区间的长度*两条扫描线之间的高度,加起来就可以
区间修改要用到线段树优化
具体图片流程可以看这里
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
#define mem(s) memset(s, 0, sizeof(s))
const int INF = 0x3f3f3f3f;
const double eps = 1e-8;
const int maxn = 2000+5;
const int mod = 998244353;
struct edge {
double l,r,h;
int f;
edge(){}
edge(double tl,double tr,double th,int tf){
l=tl;r=tr;h=th;f=tf;
}
bool operator <(const edge &rhs)const {
return h<rhs.h;
}
}a[maxn];
double X[maxn],sum[maxn<<2];int tag[maxn<<2];
void init(){
memset(sum,0,sizeof(sum));
memset(tag,0,sizeof(tag));
}
void push_up(int rt,int