[POJ](2309)BST ---- 樹狀陣列lowbit
阿新 • • 發佈:2018-12-10
做法:其實還是從題目中給的這棵二叉搜尋樹找規律,我們發現最小的其實就是 x-lowbit(x)+1,即樹狀陣列中x位置所維護的區間的左端點,接機推出最大即x+lowbit(x)-1;
AC程式碼:
#include <iostream> #include <cmath> #include <cstdio> #include <algorithm> #include <cstring> #include <vector> #include <ctime> #define IO ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0) #define pb(x) push_back(x) #define sz(x) (int)(x).size() #define sc(x) scanf("%d",&x) #define pr(x) printf("%d\n",x) #define abs(x) ((x)<0?-(x):x) #define all(x) x.begin(),x.end() using namespace std; typedef long long ll; const int mod = 1e9+7; const double PI = 4*atan(1.0); const int maxm = 1e8+5; const int maxn = 1e5+5; const int INF = 0x3f3f3f3f; inline int lowbit(int x){return x&(-x);} int main() { #ifdef LOCAL_FILE freopen("in.txt","r",stdin); #endif // LOCAL_FILE IO; int n; cin>>n; while(n--) { int i; cin>>i; cout<<i-lowbit(i)+1<<" "<<i+lowbit(i)-1<<endl;// } #ifdef LOCAL_FILE cout << "Time elapsed: " << 1.0 * clock() / CLOCKS_PER_SEC * 1000 << "ms." << endl; #endif // LOCAL_FILE return 0; }