tyvj 4393 纸条(分块)
2016-04-11 12:41
169 查看
//#include <bits/stdc++.h> #include <iostream> #include <cstdio> #include <cmath> #include <cstring> #include <algorithm> #include <queue> using namespace std; #pragma comment(linxer, "/STACK:102400000,102400000") #define LL long long #define pii pair<int, int> #define MP make_pair #define ls i << 1 #define rs ls | 1 #define md (ll + rr >> 1) #define lson ll, md, ls #define rson md + 1, rr, rs #define mod 1000000007 #define inf 0x3f3f3f3f #define N 200010 #define M 200020 #define B 450 int n, m, q; int p , len , f , x , cnt; vector<int> g ; int main(){ scanf("%d%d%d", &n, &m, &q); for(int i = 1; i <= m; ++i){ int pos, l; scanf("%d%d", &pos, &l); g[i].resize(l); for(int j = 0; j < l; ++j) scanf("%d", &g[i][j]); p[i] = pos, len[i] = l; if(l >= B) f[cnt++] = i; else{ for(int j = pos, k = 0; k < l; ++k, ++j) x[j] += g[i][k]; } } char s[10]; while(q--){ scanf("%s", s); if(s[0] == 'Q'){ int k; scanf("%d", &k); k--; int ans = x[k]; for(int i = 0; i < cnt; ++i){ int u = f[i]; if(p[u] <= k && p[u] + len[u] > k) ans += g[u][k-p[u]]; } printf("%d\n", ans); } else{ int k, y; scanf("%d%d", &k, &y); if(len[k] < B){ for(int i = p[k], j = 0; j < len[k]; ++j, ++i) x[i] -= g[k][j]; p[k] = y; for(int i = p[k], j = 0; j < len[k]; ++j, ++i) x[i] += g[k][j]; } else p[k] = y; } } return 0; }
相关文章推荐
- 编程小练习
- Apache 路径大全
- apache 基本操作
- Mybatis批量更新数据
- PL/SQL入门——基础的增删改查
- 读《暗时间》的思考
- centos7 通过kvm+vnc 实现远程桌面虚拟化和创建windows、Linux虚拟机
- 新360自媒体:北京时间自媒体平台即将上线!
- iOS中RSA加密详解
- nginx配置ssl
- 冒泡排序(java实现)
- HDU 1799 循环多少次?(组合数学)
- Python 核心编程chap7学习笔记
- Spark on YARN 部署实验
- Apache 的 httpd.conf 详解
- 批量更新数据之hibernate或者jdbc执行效果对比
- mysql index
- 深度神经网络如何看待你,论自拍What a Deep Neural Network thinks about your #selfie
- 深度神经网络导论Introduction to Deep Neural Networks
- 学习Spring.Net_1