題意:求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 最優...