線段樹學的遠遠不夠啊,網路賽的時候一直不知道怎麼做,後來看了大神報告,才學了一下。
線段樹每個節點 記錄 sum[0...5],即位置mod 5 的5種結果的數對應的和。cnt記錄區間有多少個數。
更新的時候 只要把對應子區間的sum[i]加起來就可以了
#include#includeusing namespace std;
#define maxn 100010
#define lson u<<1
#define rson u<<1|1
typedef long long ll;
int dat[maxn],tmp[maxn];
char cmd[maxn][5];
struct nodet[maxn<<2];
void build(int u,int l,int r)
void pushup(int u)
void update(int u,int pos,int val,int op)
else
}int main(){
int n;
while(scanf("%d",&n)==1){
int num=0;
for(int i=0;i
11年成都網路賽
今天把去年成都的網路賽做了一下,去年是一題不會哇,現在也挺吃力,還有幾題不會,有空再來看 attack 樹狀陣列,這題樹狀陣列節點n記錄的是wall n 和wall n 1 被炮擊的差 include include include includeusing namespace std define...
11年成都網路賽
今天把去年成都的網路賽做了一下,去年是一題不會哇,現在也挺吃力,還有幾題不會,有空再來看 attack 樹狀陣列,這題樹狀陣列節點n記錄的是wall n 和wall n 1 被炮擊的差 include include include includeusing namespace std define...
hdu4111 成都現場賽A題
題意 有n堆石子,每堆石子有乙個數目,現有兩個人博弈,每個人每次可以進行兩個操作中的乙個 1 從某堆拿掉乙個石子 若某堆石子為0了,那麼這堆就不存在了 2 合併兩堆石子 沒有操作的就輸。問是哪個贏 思想 如果每堆石子數都大於1,那麼最後結果肯定相當於所有的堆合併成一堆後,然後再乙個乙個拿掉的結果。因...