NYOJ116 線段樹 樹狀陣列

2021-08-22 06:10:27 字數 1163 閱讀 2471

題目傳送門~~戳一戳

注意陣列大小,一般我們用線段樹,都開四倍空間。但是這道題資料量是一百萬,四倍開不了

所以我們就不能開四倍,而要計算一下空間,避免浪費。

計算方法就是  1000000  找到2的n次方剛好大於一百萬的那個數  就是2的20次方是1048576

然後再拿1048576 x 2  = 2097152    得到的這個數就是所需的大概空間

**

#include#include#include#includeusing namespace std;

const int maxn=2e6+7;

const int maxnode=2097152;

struct nodenode[maxnode];

int father[maxn];

int n,m,x,y,g;

void buildtree(int i,int left,int right)

buildtree(i<<1,left,(left+right)/2);

buildtree((i<<1)+1,(left+right)/2+1,right);

}void updatetree(int ri)

int ans;

void query(int i,int l,int r)

i=i<<1;

if(l<=node[i].right)

i++;

if(r>=node[i].left)

}int main()

char op[20];

while(m--)

else

}return 0;

}

#include#include#include#includeusing namespace std;

const int maxn=1e6+7;

int c[maxn];

int n,m,x,y,flag;

char str[15];

int lowbit(int x)

void add(int i,int val)

}int sum(int i)

return sum;

}int main()

while(m--)

}

NYOJ 116 樹狀陣列

時間限制 1000 ms 記憶體限制 65535 kb 難度 5 描述 南將軍手下有n個士兵,分別編號1到n,這些士兵的殺敵數都是已知的。小工是南將軍手下的軍師,南將軍經常想知道第m號到第n號士兵的總殺敵數,請你幫助小工來回答南將軍吧。南將軍的某次詢問之後士兵i可能又殺敵q人,之後南將軍再詢問的時候...

NYOJ 116 樹狀陣列

時間限制 1000 ms 記憶體限制 65535 kb 難度 5 描述南將軍手下有n個士兵,分別編號1到n,這些士兵的殺敵數都是已知的。小工是南將軍手下的軍師,南將軍經常想知道第m號到第n號士兵的總殺敵數,請你幫助小工來回答南將軍吧。南將軍的某次詢問之後士兵i可能又殺敵q人,之後南將軍再詢問的時候,...

nyoj 116 士兵殺敵(二) 樹狀陣列

時間限制 1000 ms 記憶體限制 65535 kb 難度 5 描述 南將軍手下有n個士兵,分別編號1到n,這些士兵的殺敵數都是已知的。小工是南將軍手下的軍師,南將軍經常想知道第m號到第n號士兵的總殺敵數,請你幫助小工來回答南將軍吧。南將軍的某次詢問之後士兵i可能又殺敵q人,之後南將軍再詢問的時候...