题目链接: Color the ball
思路
已经写过一次类似前缀和的题解了,这次再写一遍线段树或树状数组的解法。这题是区间更新和单点查询,线段树的单点查询不过是区间查询的特殊形式,代码是一样的。但是树状数组的区间更新和单点查询却不同于区间更新和区间查询。不过此处就不详细说了,树状数组本身就是个神奇的东西。
1.线段树
#include <iostream>
#include <algorithm>
#include <string.h>
#include <stdio.h>
using namespace std;
int addmark[450000],seqtree[450000];
void maketree(int node,int begin,int end)
{
addmark[node]=0;
if(begin==end)
{
seqtree[node]=0;
return;
}
int mid=(begin+end)/2;
maketree(2*node,begin,mid);
maketree(2*node+1,mid+1,end);
seqtree[node]=seqtree[2*node]+seqtree[2*node+1];
}
void pushdown(int node,int begin,int end)
{
if(!addmark[node])
return;
int mid=(begin+end)/2;
addmark[2*node]+