線段樹經典題目(一定要做完)

2021-08-19 22:01:57 字數 1468 閱讀 4149

最近學習了好久的線段樹,對線段樹有了初步的基礎的認知,為了鞏固知識點找幾道基礎題練練手

重新上傳

取消1.hdu1166敵兵布陣

思路:線段樹基礎模版題(點修改+區間查詢)

#include#include#includeusing namespace std;

typedef long long ll;

const int maxn=50009;

ll a[maxn];

ll sum[maxn*4];

ll add[maxn*4];

void getup(int x)

void btree(int left,int right,int root)//遞迴建樹

int mid=(left+right)/2;

btree(left,mid,root*2);

btree(mid+1,right,root*2+1);

getup(root);

}/*void pushdown(int rt,int ln,int rn)

}*/ll myquery(int l,int r,int l,int r,int rt)//區間查詢

void addt(int l,int c,int l,int r,int rt)//點修改

int mid=(l+r)>>1;

if(l<=mid)

addt(l,c,l,mid,rt*2);

else

addt(l,c,mid+1,r,rt*2+1);

getup(rt);

}int main()

} return 0;

}

思路:線段樹+點修改+區間查詢

如果用遞迴寫,mlt,改非遞迴,ac

ac**

非遞迴線段樹

#include#includeusing namespace std;

typedef long long ll;

const ll maxn=200005;

ll max[maxn*4];

ll a[maxn];

ll n,m,n;

void btree(int x)

}ll query(int l,int r)

return ans;

}void update(int l,int c)

}int main()

{ while(scanf("%lld %lld",&n,&m)!=eof){

for(int i=1;i<=n;i++)

scanf("%lld",&a[i]);

getchar();

btree(n);

char op[2];

ll num1,num2;

for(int kk=0;kk

待續~~~~~~~

一定要做有用功

一次又一次的經歷那種感覺自己很多都沒掌握,不斷焦躁擔憂的感覺。通過一定的睡眠和放鬆,這種症狀會有所減輕。感到焦躁,很明顯以一種很不經濟的反應,does it help?一定要逐漸養成做最小功的,思維習慣。簡單的模式,就是問自己,問題是什麼,目前最好的解決辦法是什麼?當然,擔憂和焦躁,既然存在,必然有...

慘痛教訓 一定要做CHECKSUM

最近要為自己的台式裝feisty,於是去官網上下了704 desktop am64版,下完之後也沒細想,刻盤,光碟能自動啟動,於是直接關機進入安裝介面,但是到了那卻老顯示 invalid or corrupt kernel image 實在讓人百思不解。上網查了一整天,看大多數人說是刻壞了,於是用最...

Ubuntu 裝好後,一定要做的事情

sudo dpkg i wineqq2013 20131120 longene.deb 64位系統還需要執行以下命令 sudo apt get install ia32 libs ps 個人還是建議裝個xp 的虛擬機器什麼的都比裝這玩意強 2 sudo gedit etc apt sources.l...