#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...