BZOJ 4240 有趣的家庭菜园
2017-02-02 18:00
246 查看
树状数组+贪心
感觉最近写博客有一点高产。。。
考虑从小到大放。最小的要么放最左,要么放最右。由于它放左还是右不会影响中间元素的操作次数,所以直接贪心。以此类推。
感觉最近写博客有一点高产。。。
考虑从小到大放。最小的要么放最左,要么放最右。由于它放左还是右不会影响中间元素的操作次数,所以直接贪心。以此类推。
#include<cstring> #include<cstdio> #include<algorithm> #define N 300005 #define lowbit(_i) (_i&-_i) using namespace std; namespace runzhe2000 { typedef long long ll; int n, a , rk , mx, q , tail; ll ans; struct BIT { int t ; BIT(){memset(t,0,sizeof t);} int ask(int x){int r = 0; for(; x; x -= lowbit(x)) r += t[x]; return r;} void mod(int x){for(; x <= n; x += lowbit(x)) t[x]++;} }T; bool cmp(int u, int v){return a[u] > a[v];} void main() { scanf("%d",&n); for(int i = 1; i <= n; i++) scanf("%d",&a[i]), rk[i] = i; sort(rk+1, rk+1+n, cmp); for(int i = 1, tot = 0; i <= n; i++) { if(a[rk[i]] != a[rk[i-1]]) {tot += tail; for(; tail; tail--) T.mod(q[tail]);} int x = rk[i], lef = T.ask(x-1), rig = tot-lef; ans += min(lef, rig); q[++tail] = x; } printf("%lld\n",ans); } } int main() { runzhe2000::main(); }
相关文章推荐
- bzoj 4240: 有趣的家庭菜园
- 【bzoj4240】有趣的家庭菜园 贪心+树状数组
- bzoj4240 有趣的家庭菜园 树状数组
- [树状数组] BZOJ 4240 有趣的家庭菜园
- [BZOJ]4240: 有趣的家庭菜园 贪心+树状数组
- bzoj 4240: 有趣的家庭菜园【树状数组+贪心】
- [bzoj4240] 有趣的家庭菜园
- bzoj 4240: 有趣的家庭菜园 树状数组+贪心
- BZOJ4240 有趣的家庭菜园(贪心+树状数组)
- 【bzoj4240】有趣的家庭菜园
- [BZOJ4240]有趣的家庭菜园(贪心+树状数组)
- 【BZOJ4240】有趣的家庭菜园 树状数组+贪心
- BZOJ4240: 有趣的家庭菜园
- 【OI做题记录】【BZOJ】有趣的家庭菜园
- 4240: 有趣的家庭菜园
- JZOJ 4296【NOIP2015模拟11.2】有趣的有趣的家庭菜园
- 【NOIP2015模拟11.2】有趣的有趣的家庭菜园
- ssoj2455有趣的有趣的家庭菜园(线段树)
- [JZOJ4296]有趣的有趣的家庭菜园
- JOI 有趣的有趣的家庭菜园Fgarden