https://www.acwing.com/problem/content/3206/
这题数据范围太小了,直接暴力也能过,我是按下面这道题标准去写的hhh。
1228. 油漆面积
#include<bits/stdc++.h>
using namespace std;
const int N=110;
int ans;
struct Node{
int l,r;
int cnt,len;
}tr[N*4];
struct LOC{
int x,y1,y2;
int k;
}st[N*2];
int n;
bool cmp(LOC a,LOC b){
return a.x<b.x;
}
void pushup(int u){
if(tr[u].cnt>0)tr[u].len=tr[u].r-tr[u].l+1;
else if(tr[u].l==tr[u].r)tr[u].len=0;
else tr[u].len=tr[u<<1].len+tr[u<<1|1].len;
}
void build(int u,int l,int r){
tr[u]={l,r};
if(l==r)return;
int mid=l+r>>1;
build(u<<1,l,mid);
build(u<<1|1,mid+1,r);
}
void query(int u,int l,int r,int k){
if(l<=tr[u].l&&r>=tr[u].r){
tr[u].cnt+=k;
pushup(u);
return ;
}
int mid=tr[u].l+tr[u].r>>1;
if(l<=mid)query(u<<1,l,r,k);
if(r>mid)query(u<<1|1,l,r,k);
pushup(u);
}
int main(){
cin>>n;
int j=0;
for(int i=0;i<n;i++){
int x1,x2,y1,y2;
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
st[j++]={x1,y1,y2,1};
st[j++]={x2,y1,y2,-1};
}
sort(st,st+j,cmp);
build(1,0,100);
for(int i=0;i<j;i++){
if(i>0)ans+=tr[1].len*(st[i].x-st[i-1].x);
query(1,st[i].y1,st[i].y2-1,st[i].k);
}
cout<<ans<<endl;
return 0;
}