您的位置:首页 > 其它

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: