nssl1467-U【差分】
生活随笔
收集整理的這篇文章主要介紹了
nssl1467-U【差分】
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
正題
題目大意
n?nn*nn?n的矩陣,每次讓一個下三角形內數字加上一定權值。求最后所有位置的異或和
解題思路
我們發現如果我們對于沒行做前綴和的話,我們需要修改的位置就是一個豎直下去的一列和斜著的一條,所以我們可以分別對于豎著的和斜著的做一次差分,我們就可以求出該矩形的差分
codecodecode
#include<cstdio> #include<cstring> #include<algorithm> #define ll long long using namespace std; const ll N=2100; ll n,q,a[N][N],b[N][N],s[N][N],ans; int main() {scanf("%lld%lld",&n,&q);while(q--){ll x,y,l,s;scanf("%lld%lld%lld%lld",&x,&y,&l,&s);l=min(l,n);a[x][y]+=s;a[x+l][y]-=s;b[x][y+1]+=s;b[x+l][y+l+1]-=s;}for(ll i=1;i<=n;i++)for(ll j=1;j<=n;j++)a[i][j]+=a[i-1][j],s[i][j]+=a[i][j];for(ll i=1;i<=n;i++)for(ll j=1;j<=n;j++)b[i][j]+=b[i-1][j-1],s[i][j]-=b[i][j];for(ll i=1;i<=n;i++)for(ll j=1;j<=n;j++)s[i][j]+=s[i][j-1],ans=ans^s[i][j];printf("%lld",ans); }總結
以上是生活随笔為你收集整理的nssl1467-U【差分】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 51nod-有限背包计数问题【dp】
- 下一篇: nssl1468-V【状压,数学期望,d