hdu1698之線段樹

2021-06-13 22:30:45 字數 835 閱讀 6139

詳解請看**注釋

#include#include#include#include#include#include#include#include#include#define inf 99999999

using namespace std;

const int max=100000+10;

//sum表示區間left~right的和,mark表示區間的是否已經更新(但是孩子未更新)

int sum[max<<2],mark[max<<2];

void buildtree(int n,int left,int right)

void upchild(int n,int len)

}void update(int l,int r,int date,int n,int left,int right)

upchild(n,right-left+1);//在即將可能更新孩子前,先將上一次需要更新孩子先更新好

int mid=left+right>>1;

if(l<=mid)update(l,r,date,n<<1,left,mid);//更新left~right中的l~mid

if(r>mid)update(l,r,date,n<<1|1,mid+1,right);//更新left~right中的mid+1~r

sum[n]=sum[n<<1]+sum[n<<1|1];

}int main()

printf("case %d: the total value of the hook is %d.\n",i,sum[1]);

} return 0;

}

HDU 1698 線段樹區間修改

一道線段樹區間替換的模板題 練習一下notonlysuccess的線段樹模板 注意注意!這兩個運算符號的優先順序非常低,只要寫到就要加括號,調了兩個小時的血淚啊 include include define lson l,m,rt 1 define rson m 1,r,rt 1 1 define ...

HDU 1698 線段樹區間更新

之前一直覺得自己線段樹敲得很熟練,然後。某天。是的,就是我的資料結構周開始的時候我發現。我特麼才會單點更新是怎麼回事!只會區間查詢是腫麼回事!摔!恩。就是表達一下弱渣的心情。區間更新,用到延遲操作。延遲操作應該是這麼回事。線段樹的優越性就是體現在,第一是二分查詢,第二是區間操作。當我們需要多次對區間...

hdu 1698 線段樹區間修改

題目鏈結 解題報告 區間修改的模板題目。需要打乙個set標記,表示區間 l,r 被修改為v.在這道題目裡。一開始所有結點被賦值為1,之後給q個修改,把 l,r 修改為1,2,或3.最後求區間和。我的寫法採用了劉汝佳在訓練指南中使用的寫法。參考 include include include incl...