給出乙個\(n\)個數的數列,定義\(f_i=min\(i\ge j)\),求\(\sum f_i\)
題目就要我們求在這個數之前並且和這個數的差最小的數,我們考慮這個數必定出現在當前\(a_i\)的前驅或後繼中。所以我們可以用平衡樹維護這個數列,每次求一下前驅和後繼,注意這裡可以相等,再把原數插入進去即可。
#includeusing namespace std;
int read()
while(isdigit(ch))res=(res<<3)+(res<<1)+(ch^48),ch=getchar();
return res*w;
}const int inf=0x3f3f3f3f;
const int n=1e6+10;
#define root t[0].son[1]
struct splay
}t[n];
int tot;
int ident(int x)
void change(int x,int f,int o)
void pushup(int x)
void rotate(int x)
void splay(int x,int goal) }
void insert(int x)
else while(1)
int nxt=x=x)ans=min(ans,t[now].val);
int nxt=t[now].val>x?0:1;
now=t[now].son[nxt];
} return ans;
} int querypre(int x)
return ans;
}}t;
int main()
printf("%d",ans);
}
營業額統計 Treap
tiger最近被公司公升任為營業部經理,他上任後接受公司交給的第一項任務便是統計並分析公司成立以來的營業情況。tiger拿出了公司的賬本,賬本上記錄了公司成立以來每天的營業額。分析營業情況是一項相當複雜的工作。由於節假日,大減價或者是其他情況的時候,營業額會出現一定的波動,當然一定的波動是能夠接受的...
treap 營業額統計
tiger最近被公司公升任為營業部經理,他上任後接受公司交給的第一項任務便是統計並分析公司成立以來的營業情況。tiger拿出了公司的賬本,賬本上記錄了公司成立以來每天的營業額。分析營業情況是一項相當複雜的工作。由於節假日,大減價或者是其他情況的時候,營業額會出現一定的波動,當然一定的波動是能夠接受的...
鍊錶 營業額統計
題意 給出n個數,每個數都有乙個波動值,是對於前面每個數的差的絕對值的最小值。第乙個數的波動值就是其本身。求n個數的最小波動值之和。n 32767 思路 將元素排序後做成鍊錶,用to i 表示i在排序後的位置。從最後一天開始計算,找到它在鍊錶中的位置,其值為xval,其鍊錶左邊的值為lval,其鍊錶...