hdu 4262 線段樹優化

2021-06-09 04:33:17 字數 865 閱讀 3821

#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(int u)

void build(int u,int l,int r)

int mid=(l+r)>>1;

build(lson,l,mid);

build(rson,mid+1,r);

pushup(u);

}void update(int u,int pos,int val)

if(pos<=t[lson].rig)update(lson,pos,val);

else update(rson,pos,val);

pushup(u);

}int query(int u,int l,int r)

int main()

build(1,1,n);

int cur=1;

__int64 ans=n;

for(int i=1;icur)tmp=query(1,cur+1,map[i])-1;

else tmp=query(1,map[i],cur-1);

ans+=min(tmp,n-i+1-tmp);

update(1,map[i],0);

cur=map[i];

} printf("%i64d\n",ans);

} return 0;

}

模擬 線段樹 hdu4262 Juggler

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

hdu 4391 線段樹 優化

2012 多校第十場,這個題目比賽的時候我直接在每個節點裡面開了乙個map,結果毫無疑問mle 了,比賽之後看了結題報告說是 分段雜湊,沒學過,後來聽說線段樹稍微剪枝一下就能過,換了一下思路,確實就能過了,每個節點也不需要記錄每種顏色的個數了,只需要記錄最大的編號和最小的就可以了。include i...

HDU 1542 掃瞄線 線段樹優化

有些需要說明的地方 以前寫線段樹時線段樹的每個葉節點為乙個數字,代表乙個區域 7 代表第七個單位長度區域 本題不同在於,最小單位區域必須有兩點代表 2 3 代表從2到3 的乙個區域 上篇掃瞄線演算法複雜度為o n 2 本題用離散化法加線段樹優化為nlog n include include incl...