ZOJ
来源:互联网 发布:Linux修改进程名字 编辑:程序博客网 时间:2024/06/08 09:55
标记做法
这应该是正解吧,对整行整列的需要更新的用另外的两个数组标记,最后查询
#include<iostream>#include<algorithm>#include<cstdio>#include<cstdlib>#include<cstring>#include<string>#include<cmath>#include<set>#include<queue>#include<stack>#include<map>#define PI acos(-1.0)#define in freopen("in.txt", "r", stdin)#define out freopen("out.txt", "w", stdout)using namespace std;typedef long long ll;typedef unsigned long long ull;const int maxn = 10000 + 7, maxd = (1<<18)-1, mod = 1e9 + 7;const int INF = 0x7f7f7f7f;int n, m;int mp[111][111];int r[111], c[111];void init() { for(int i = 1; i <= n; ++i) { for(int j = 1; j <= m; ++j) { scanf("%d", &mp[i][j]); } } memset(r, 0, sizeof r); memset(c, 0, sizeof c);}void solve() { int q, d, r1, c1, r2, c2, v; scanf("%d", &q); while(q--) { scanf("%d", &d); if(d == 0) { scanf("%d %d %d %d %d", &r1, &c1, &r2, &c2, &v); if(r1 != r2) { for(int i = c1; i <= m; ++i) mp[r1][i] += v; for(int i = 1; i <= c2; ++i) mp[r2][i] += v; } else for(int i = c1; i <= c2; ++i) mp[r1][i] += v; for(int i = r1+1; i < r2; ++i) r[i] += v; } else if(d == 1) { scanf("%d %d %d %d %d", &r1, &c1, &r2, &c2, &v); if(c1 != c2) { for(int i = r1; i <= n; ++i) mp[i][c1] += v; for(int i = 1; i <= r2; ++i) mp[i][c2] += v; } else for(int i = r1; i <= r2; ++i) mp[i][c1] += v; for(int i = c1+1; i < c2; ++i) c[i] += v; } else { scanf("%d %d", &r1, &c1); printf("%d\n", mp[r1][c1] + r[r1] + c[c1]); } }}int main() { int kase = 1; while(~scanf("%d %d", &n, &m) && n+m) { init(); printf("Case %d\n", kase++); solve(); } return 0;}
阅读全文
1 0
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- Python生成随机数的方法
- 关于@Value注解,注意事项
- MySQL之存储引擎
- Visual Studio 2017 无法引用 windows.h wincon.h 的解决办法
- IntentService使用详解和实例介绍
- ZOJ
- 随机数的方法
- ANR分析-WaitingPerformingGc
- Android N指纹识别
- 算法问题
- 《正义之心-为什么人们总是相信我对你错》-读后感
- if break、if continue和if return三者之间的区别
- 【机器学习实战】第12章 使用FP-growth算法来高效发现频繁项集
- hostname