題意:
對乙個線段上的值進行修改,一次可以把[i,j]這個區間上的值改為1,2,或3。1---n這個區間上數字的和
思路:一道很加深對成段更新理解的題目,需要成段更新加上一點技巧具體見**update()
#include#include#includeusing namespace std;
const int nmax = 100010;
structnode[3 * nmax];
int ans;
void build(int l ,int r ,int u)
int m = (l + r)>>1;
build(l ,m ,u * 2);
build(m+1 , r , u*2+1);
}//lazy值為0的時候代表這個區間上數字不唯一,初始值為1
void update(int left ,int right , int val ,int u)
if(node[u].lazy != 0)
int m = (node[u].r + node[u].l)>>1;
if(left <= m)
if(right >= m+1)
}void query(int left ,int right ,int u)
int m = (r + l)>>1;
if(right <= m)
if(left >= m+1)
query(left , m , u*2);
query(m+1 , right , u*2 + 1);
}int main()
ans=0;
query(1 , n ,1);
printf("case %d: the total value of the hook is %d.\n",tt,ans);
// printf("%d\n",ans);
}return 0;
}
HDOJ1698解題報告 線段樹模板
題目概述 一段區間從1 n,每次操作將某一段全部改為x,操作完成後求整個區間和。大致思路 典型的乙個rmq模板題。只需要注意add操作裡pushdown的 改成 就可以了。還有注意在build tree的時候初始化整棵樹!還有注意在build tree的時候初始化整棵樹!還有注意在build tre...
hdu1698 線段樹成段更新
成段更新 通常這對初學者來說是一道坎 需要用到延遲標記 或者說懶惰標記 簡單來說 就是每次更新的時候不要更新到底 用延遲標記使得更新延遲到下次需要更新 or 詢問到的 時候 include include define lson l,m,rt 1 define rson m 1,r,rt 1 1 u...
HDOJ 1698 區間更新
include include include include include using namespace std define lson l m rt 1 define rson m 1,r rt 1 1 寫下自己對區間操作的一些理解,首先全部的資料都是儲存在sum rt 中的,可是如何理解這...