首页 > 代码库 > Codeforces Round #427 (Div. 2) C. Star sky(二维前缀和)
Codeforces Round #427 (Div. 2) C. Star sky(二维前缀和)
题目链接:Codeforces Round #427 (Div. 2) C. Star sky
题意:
在一个二维平面上有n个星星,每个星星有一个初始的亮度,每过去一秒,星星的亮度变化为(s+1)%(c+1).
现在有q个询问,问t秒后一个矩形区域的星星的总亮度为多少。
题解:
由于c不大,将每颗星星按照初始亮点分类,每一类在任意时间的亮度都是相同的,然后对应加一加就行了。
1 #include<bits/stdc++.h> 2 #define RT(l,r) (l+r|l!=r) 3 #define mst(a,b) memset(a,b,sizeof(a)) 4 #define F(i,a,b) for(int i=a;i<=b;++i) 5 #define ___ freopen("c:\\code\\in.txt","r",stdin); 6 using namespace std; 7 typedef long long ll; 8 typedef pair<int,int>P; 9 10 const int N=1e5+7; 11 12 int n,q,c,mp[12][111][111]; 13 14 int sum(int v,int x,int y) 15 { 16 int ret = 0; 17 for(int i = x;i > 0;i -= i&-i) 18 for(int j = y;j > 0;j -= j&-j) 19 ret += mp[v][i][j]; 20 return ret; 21 } 22 void add(int v,int x,int y,int val) 23 { 24 for(int i = x;i <= 100;i += i&-i) 25 for(int j = y;j <= 100;j += j&-j) 26 mp[v][i][j] += val; 27 } 28 29 int get(int v,int x1,int y1,int x2,int y2) 30 { 31 return sum(v,x2,y2)-sum(v,x1-1,y2)-sum(v,x2,y1-1)+sum(v,x1-1,y1-1); 32 } 33 34 int main() 35 { 36 scanf("%d%d%d",&n,&q,&c); 37 F(i,1,n) 38 { 39 int x,y,v; 40 scanf("%d%d%d",&x,&y,&v); 41 add(v,x,y,1); 42 } 43 F(i,1,q) 44 { 45 int t,x1,y1,x2,y2; 46 scanf("%d%d%d%d%d",&t,&x1,&y1,&x2,&y2); 47 t%=(c+1); 48 int ans=0; 49 F(j,0,c) 50 { 51 int tmp=(t+j)%(c+1); 52 ans+=tmp*get(j,x1,y1,x2,y2); 53 } 54 printf("%d\n",ans); 55 } 56 return 0; 57 }
Codeforces Round #427 (Div. 2) C. Star sky(二维前缀和)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。