前不久學習了樹狀陣列,今天才打算做做相關題目,於是選擇了杭電oj的1166,各個營地士兵的數量的問題
不說什麼了,直接上**吧
#include#includeusing namespace std;
int n;//有n個營地
int c[50005];
int y; //臨時儲存輸入的陣列的值;
int lowbit(int x)
int sum(int c,int x) //直接求的前x項和
return sum;
}void change(int c,int i,int x)//更新每乙個c[n];
}int main()
; int m,n;
printf("case %d:\n",t-t);//輸出第幾個測試案例
scanf("%d",&n);
for(i=1;i<=n;i++)
while(scanf("%s",ml)!=eof)//每乙個命令
if(strcmp(ml,"sub")==0)
if(strcmp(ml,"query")==0)
if(strcmp(ml,"end")==0)}}
return 0;
}
ps:1、需要注意每個測試案例要初始化。2、輸入資料的時候不要丟掉個數scanf(「%d%d」,&m,&n); 一定要個數對應(這兩個問題我就是這麼錯的,浪費了不少時間55555~)
杭電1166 線段樹(單點更新)
線段樹只是acm眾多演算法中的很普遍的一種,但是他的效率非常高,一般演算法複雜度為o n 的題,通過線段樹之後,就會變成o log2 n 本文是以杭電acm1166題舉例,來對線段樹進行一些了解 杭電1166原題鏈結 比如說求5到12的總人數,用線段樹的話,你只要找到 5,7 8,10 11,12 ...
杭電 1166 敵兵布陣 (線段樹)
c國的死對頭a國這段時間正在進行軍事演習,所以c國間諜頭子derek和他手下tidy又開始忙乎了。a國在海岸線沿直線布置了n個工兵營地,derek和tidy的任務就是要監視這些工兵營地的活動情況。由於採取了某種先進的監測手段,所以每個工兵營地的人數c國都掌握的一清二楚,每個工兵營地的人數都有可能發生...
杭電 HOJ 1166 敵兵布陣 解題報告
直接求超時。用線段樹。簡單做法直接用2n陣列,以1為root,2 i為左節點,2 i 1為右節點。求區間 a,b 和時,如果a為右節點,則減去左節點的值。如果b為左節點,則減去右節點的值。a,b迭代為自己的父母。當a,b相等時,加上當前節點的值,即為區間和。我也是第一次接觸線段樹的概念。剛開始也想自...