hdu 1166 敵兵布陣

2021-06-06 18:21:33 字數 1572 閱讀 8768

線段樹的模版 沒什麼思想

#include #include #include #include #include #include #include #include #include #include #include #include #include #define ll long long

#define vi vector#define si set#define readf freopen("input.txt","r",stdin)

#define writef freopen("output.txt","w",stdout)

#define fu(i,a) for(int i(1); i <= (a); i++)

#define fd(i,a) for(int i(a); i >= (1); i--)

#define for(i,a,b) for(int i(a);i <= (b); i++)

#define ford(i,a,b) for(int i(a);i >= (b); i--)

#define set(a,b) memset(a,b,sizeof(a))

#define sd(a) scanf("%d",&(a))

#define ln printf("\n")

#define ps printf(" ")

#define pb push_back

#define lson l , m , rt << 1

#define rson m + 1 , r , rt << 1 | 1

using namespace std;

const int maxn = 222222;

int value[maxn>>2],n;

struct nodetree[maxn];// a為線段的左端點,b為右端點,sum即為這個怎麼說....和!

void buildtree(int a,int b,int k)

int mid=(a+b)>>1; //裝b利器 位運算! 其實就是除以2

buildtree(a,mid,k<<1); //裝b利器 位運算! 其實就是乘以2

buildtree(mid+1,b,k<<1|1) ; //裝b利器 位運算! 其實就是乘以2+1;

tree[k].sum=tree[k<<1].sum+tree[k<<1|1].sum; //先建樹後統計,所以寫在後面

}// k為根結點,a為左端點,b為右端點

void update(int a,int val,int k)//只有到了跟結點才會更新此點的值

if(a <= tree[k<<1].b )

update(a,val,k<<1);

else

update(a,val,k<<1|1);

tree[k].sum=tree[k<<1].sum+tree[k<<1|1].sum;//不要忘記將所有父節點什麼的更新

}//應該每次都從根節點開始找吧..~~

int query(int x,int y,int k)

}int main()

}return 0;

}

hdu 1166 敵兵布陣

這是一道線段樹里最簡單的一類題目了,單點更新型別!include define lson l m rt 1 define rson m 1 r rt 1 1 const int maxx 55555 int sum maxx 2 void pushup int rt void build int l...

HDU 1166 敵兵布陣

description lily 特別喜歡養花,但是由於她的花特別多,所以照料這些花就變得不太容易。她把她的花依次排成一行,每盆花都有乙個美觀值。如果lily把某盆花照料的好的話,這盆花的美觀值就會上公升,如果照料的不好的話,這盆花的美觀值就會下降。有時,lily想知道某段連續的花的美觀值之和是多少...

HDU 1166 敵兵布陣

複習線段樹,把notonlysuccess上面的推薦題目都刷一遍。需求 單點更新,區間求和。include include include include include include include include include include include include include ...