[luogu3397]地毯(二维线段树组)

来源:互联网 发布:js删除指定class的div 编辑:程序博客网 时间:2024/06/02 21:24

在n*n的格子上有m个地毯。

给出这些地毯的信息,问每个点被多少个地毯覆盖。
输入样例#1:
5 3
2 2 3 3
3 3 5 5
1 2 1 4
输出样例#1:
0 1 1 1 0
0 1 1 0 0
0 1 2 1 1
0 0 1 1 1
0 0 1 1 1

#include<iostream>using namespace std;const int maxn=1010;int n,m;int x1,y1,x2,y2;int bit[maxn][maxn];//二维树状数组void add(int x,int y,int v){    for (int i=x;i<=n;i+=i&-i)        for (int j=y;j<=n;j+=j&-j)            bit[i][j]+=v;   }long long sum(int x,int y){    long long ans=0;    for (int i=x;i>0;i-=i&-i)        for (int j=y;j>0;j-=j&-j)            ans+=bit[i][j];    return ans;}int main(){    cin>>n>>m;    while (m--){        cin>>x1>>y1>>x2>>y2;        add(x2+1,y2+1,1);        add(x1,y2+1,-1);        add(x2+1,y1,-1);        add(x1,y1,1);          //此处有坑    }    for (int i=1;i<=n;i++){        for (int j=1;j<=n;j++)            cout<<sum(i,j)<<" ";        cout<<"\n";    }}
原创粉丝点击