poj2892 樹狀陣列 二分

2021-06-06 03:53:16 字數 1285 閱讀 1846

題意:求0所在位置兩點連續0的個數,不斷更新某個點,將這個點變成0或1

用數狀陣列維護這個表,變成0,1就更新某個點,這是樹狀陣列的特長。查詢的時候,對兩邊二分就行了

//

// main.cpp

// poj2892

//// created by he xilin on 12-4-30.

//#include #include #include using namespace std;

const int maxn = 50000;

int c[maxn + 10];

void delete(int x)//樹狀陣列更新點

}void recover(int x)//樹狀陣列更新點

}int sum(int x)//樹狀陣列求和

return ans;

}int binary(int x, int s, int t,bool issecond)//二分左邊的區間

int ans = -1;

int total = sum(x);

int mid;

while(s <= t)

else

}return ans == -1 ? mid : ans;

}int binary2(int x, int s, int t,bool issecond)//二分右邊的區間

int mid;

while(s <= t)

else if(flag - total < 1)

else

}return ans == -1 ? mid: ans;

}int query(int n,int x)//查詢

int s = 1;

int t = x - 1;

int mid1 = binary(x,s, t,false);

s = x + 1;

t = n;

int mid2 = binary2(x, s, t,true);

//printf("%d, %d\n",mid1,mid2);

return mid2 - mid1 - 1;

}int main (int argc, const char * argv)

else if(strcmp(ch,"r") == 0)

else

int ans = query(n,num);

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

}} }

return 0;

}

POJ 2892(樹狀陣列 二分)

題目 poj上1a,但是拿到hdoj1540上卻wa了,看了discuss發現在hdoj需要考慮乙個村莊被摧毀和恢復多次的情況 include include define max 50005 int n,m int c max b max bool a max int stack max top ...

poj2182 樹狀陣列 二分)

題意 給乙個數n,然後n 1行,每行乙個數q,第i個數qi代表第i 1頭牛前面有qi頭牛編號比它小,求所有牛的編號。因為只有最後一頭牛編號是確定的,所有從後往前,每次用二分找到數字,並用樹狀陣列確定和儲存。include include include includeusing namespace ...

E Minimum Array 樹狀陣列 二分

其實貪 心還是比 較顯 然其實貪心還是比較顯然 其實貪心還是 比較顯然對於 乙個ai 我們最 好找到b j n ai 對於乙個a i,我們最好找到b j n a i 對於乙個ai 我們 最好找到 bj n ai 這樣 對n求餘 後就是0 最 優這樣對n求餘後就是0,最優 這樣對n求餘 後就是0 最優...