POJ 4047 Garden 线段树 (二)

2014-11-24 11:03:04 · 作者: · 浏览: 4
t T;
scanf("%d", &T);
while(T--)
{
scanf("%d%d%d", &n, &m, &k);
for(int i = 1; i <= n; i++) scanf("%d", &val[i]);
t[1] = 0;
for(int i = 1; i <= k; i++) t[1] += val[i];
for(int i = 2; i <= n - k + 1; i++) t[i] = t[i - 1] - val[i - 1] + val[i - 1 + k];
n = n - k + 1;
build(1, n, 1);
int op, x, y;
while(m--)
{
scanf("%d%d%d", &op, &x, &y);
if(op == 0) change(x, y);
else if(op == 1)
{
int tmp = val[x];
change(x, val[y]);
change(y, tmp);
}
else if(op == 2) printf("%d\n", query(x, y - k + 1, 1, n, 1));
}
}
return 0;
}



作者:sdj222555