题解:AT_abc434_d [ABC434D] Clouds

· · 题解

int a[2005][2005],b[2005][2005],only[N];
void solve(){
    int n;
    cin>>n;
    for(int i=1;i<=n;i++){
        int x1,y1,x2,y2;
        cin>>x1>>x2>>y1>>y2;
        a[x1][y1]++,a[x1][y2+1]--,a[x2+1][y1]--,a[x2+1][y2+1]++;
        b[x1][y1]+=i,b[x1][y2+1]-=i,b[x2+1][y1]-=i,b[x2+1][y2+1]+=i;
    }
    int cnt0=0;
    for(int i=1;i<=2000;i++){
        for(int j=1;j<=2000;j++){
            a[i][j]+=a[i-1][j]+a[i][j-1]-a[i-1][j-1];
            b[i][j]+=b[i-1][j]+b[i][j-1]-b[i-1][j-1];
            if(!a[i][j])cnt0++;
            if(a[i][j]==1)only[b[i][j]]++;
        }
    }
    for(int i=1;i<=n;i++){
        cout<<cnt0+only[i]<<endl;
    }
}