poj3468之線段樹

2021-06-13 23:10:06 字數 950 閱讀 9163

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

using namespace std;

const int max=100000+10;

__int64 sum[max<<2],mark[max<<2];//sum表示區間和,mark表示父節點更新了但是孩子未更新

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

__int64 mid=left+right>>1;

buildtree(n<<1,left,mid);

buildtree(n<<1|1,mid+1,right);

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

}void upchild(int n,__int64 len)

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

upchild(n,right-left+1);//在本次更新前先更新上一次父節點更新但是孩子未更新的孩子

__int64 mid=left+right>>1;

if(l<=mid)update(l,r,date,n<<1,left,mid);

if(r>mid)update(l,r,date,n<<1|1,mid+1,right);

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

}__int64 query(__int64 l,__int64 r,int n,__int64 left,__int64 right)

int main()

else

} }return 0;

}

POJ 3468 線段樹區間

這個題目是第二個區間修改的線段樹了,做到現在可以發現線段樹真的非常的靈活,特別是區間修改部分,前面的單點修改其實還是也可參看模版的,區間修改就真的非常靈活了了。這個題目就是區間加法,然後求乙個累加和,同樣地也是需要乙個延遲標誌的,也就是lazy,然後還需要乙個統計當前區間的全部和的陣列。就可以輕鬆解...

poj 3468 線段樹lazy操作

題意 區間每個數加上乙個數,詢問乙個區間之和.include include include include include include include include include define ll long long define ls rt 1 define rs rt 1 1 def...

poj 3468 線段樹 lazy思想

思路 如果直接去做,每次都更新到葉子節點,那必然會tle,我們可以採用lazy的思想 沒必要每次更新都更新到葉子節點,只要有乙個合適的範圍就用乙個增量來記錄它,當下一次詢問時,如果這個範圍正好合適詢問的範圍,就直接是這個節點的sum值加上這個區間長度 lnc,再加到總和上去,若這個節點的範圍不適合所...