HDU 4262 Juggler 樹狀陣列

2022-07-21 06:36:13 字數 1146 閱讀 1943

將每個球按輸入順序編號,建立 它第幾個被扔掉->編號 的對映關係。

記錄當前在手裡的球的編號,按扔掉的順序查詢這個球的編號,看看這個球是逆時針轉到手裡更近還是順時針轉到手裡更近,即當前扔掉球的編號與當前手裡球的編號之間有幾個球。

樹狀陣列c[i]記錄編號i的球是否還在。

球是環形排列的,特殊處理一下。

對於扔掉乙個球之後下乙個落在手裡的球的編號,二分判定,找順時針方向第乙個有球的位置

#include #include 

#include

#include

#define ll long long int

using

namespace

std;

const

int maxn = 100100

;int

c[maxn];

intn;

intpostoid[maxn];

intidtopos[maxn];

int lowbit( int

x )int query( int

x )

return

res;

}void update( int x, int

val )

return;}

int bisearch( int l, int

r )

int ans = 0

;

while ( l <=r )

else l = mid + 1

; }

return

ans;

}int

main()

int cur = 1; //

當前手裡的

ll ans = 0

;

for ( int i = 1; i <= n; ++i )

else

if ( id >cur )

update( id, -1

); ++ans;

cur =bisearch( id, n );

}printf(

"%i64d\n

", ans );

}return0;

}

模擬 線段樹 hdu4262 Juggler

juggler 題目 題意 有個數字圓環。三種操作 逆時針轉乙個,順時針轉乙個,丟掉手中的那個的同時順時針的數字到你的手裡。每個操作都花費一秒。告訴你要求的出圈順序,求最小花費時間。注 開始在手中的球為1.題解 假設當前要移除的珠子為i,我們會發現無論左移還是右移都會得到同乙個序列,即移去某個數字對...

hdu 4262 線段樹優化

include include include includeusing namespace std define lson u 1 define rson u 1 1 define maxn 100005 int map maxn struct nodet maxn 2 void pushup i...

Trie樹(字典樹)HDU 1251

又稱單詞查詢樹,trie樹 是一種 樹形結構 是一種雜湊樹的變種。典型應用是用於統計,排序和儲存大量的 字串 但不僅限於字串 所以經常被搜尋引擎系統用於文字詞頻統計。它的優點是 利用字串的公共字首來減少查詢時間,最大限度地減少無謂的字串比較,查詢效率比 雜湊樹高。根節點不包含字元,除根節點外每乙個節...