hdu 1892 樹狀陣列,二維

2021-06-23 05:08:43 字數 1299 閱讀 8858

注意點:輸入時x1,x2,y1,y2的大小判斷,x,y從0開始,書拿光時的判斷

第一題二維,還是蠻神奇的。

#include#include#includeusing namespace std;

#define m 1002

int tree[m+1][m+1];

int lowbit(int x)

void update(int x,int y,int val)

}int sum(int x,int y)

int work(int x,int y)

int main()

int x1,x2,y1,y2,n;

char c[3];

for(int i=0;ix2)

if(y1>y2)

int ans=sum(x2+1,y2+1)-sum(x1,y2+1)-sum(x2+1,y1)+sum(x1,y1); //1

printf("%d\n",ans);

}else if(c[0]=='a')

else if(c[0]=='d')

else}}

return 0;

}

關於注釋1那裡的區域理解看這裡:

1906ms....超慢,找找怎麼優化~~

找到了,加了乙個book陣列來記錄桌子上有沒有書,用空間換時間

時間降到406ms

#include#include#includeusing namespace std;

#define m 1002

int tree[m+1][m+1],book[m+1][m+1];

int lowbit(int x)

void update(int x,int y,int val)

}int sum(int x,int y)

/*int work(int x,int y)

*/int main()

}int x1,x2,y1,y2,n;

char c[3];

for(int i=0;ix2)

if(y1>y2)

int ans=sum(x2+1,y2+1)-sum(x1,y2+1)-sum(x2+1,y1)+sum(x1,y1);

printf("%d\n",ans);

}else if(c[0]=='a')

else if(c[0]=='d')

else}}

return 0;

}

hdu1892二維樹狀陣列

樹狀陣列一般的操作只有 1.單點更新,區間查詢 2.區間更新,單點查詢 其中區間更新和單點更新不能同時寫在一起,會對樹狀陣列的結構早成影響。這題 wa的情況主要是沒有考慮到 x1,y1 可能大於 x2,y2 訓練 訓練題鏈結 include include include include inclu...

HDU 1892 二維樹狀陣列

題目大意 有很多方格,每個方格對應的座標為 i,j 剛開始時每個格仔裡有1本書,然後讓你統計一片區域有多少本書,還可以增加書和減少,移動書。解題思路 和一維樹狀陣列沒撒子區別。一維擴充套件到二維而已。需要注意的兩點是 1.x,y座標從0開始,所以儲存更新的時候座標分別加1進行更新。因為0座標會進入死...

二維樹狀陣列 hdu1892

二維樹狀陣列 hdu1892 二維書架上原本有1本書 t組樣例,四種操作,search,add,del,move 書架上的書小於del的值時,取完該格仔的書即可 查詢操作用二維的容斥推 由於格仔取值可以等於0,故下標都 1 include include include include includ...