codeforces830B Cards Sorting -- 线段树
来源:互联网 发布:sha1 js 时间 编辑:程序博客网 时间:2024/06/01 09:04
用线段树记录区间有几个数还没被取走,将所有数从小到大排序后依次更新答案就可以了。注意相等的时候取的数是在上次取的数后面的第一个数。
代码:
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;#define N 100010#define ll long longstruct Node{ int w,f;}a[N];int i,j,k,p,n,m,c[N<<2],Last;ll Ans;inline bool Cmp(Node a,Node b){ if(a.w==b.w)return a.f<b.f; return a.w<b.w;}inline void Build(int x,int l,int r){ c[x]=r-l+1; if(l==r)return; int Mid=l+r>>1; Build(x<<1,l,Mid); Build(x<<1|1,Mid+1,r);}inline int Query(int x,int l,int r,int L,int R){ if(l>R||r<L)return 0; if(l>=L&&r<=R)return c[x]; int Mid=l+r>>1; return Query(x<<1,l,Mid,L,R)+Query(x<<1|1,Mid+1,r,L,R);}inline void Update(int x,int l,int r,int y){ c[x]--; if(l==r)return; int Mid=l+r>>1; if(Mid>=y)Update(x<<1,l,Mid,y);else Update(x<<1|1,Mid+1,r,y);}inline int Get(int x,int y){ if(x<=y)return Query(1,1,n,x,y); return Query(1,1,n,1,y)+Query(1,1,n,x,n);}inline void Calc(int y){ Ans+=Get(Last,y); Update(1,1,n,y); Last=y;}int main(){ scanf("%d",&n); for(i=1;i<=n;i++)scanf("%d",&a[i].w),a[i].f=i; sort(a+1,a+n+1,Cmp); Build(1,1,n); for(i=1;i<=n;i=j+1){ k=0; for(j=i;j<n&&a[j+1].w==a[j].w;j++) if(a[j].f>Last&&!k)k=j; if(a[j].f>Last&&!k)k=j; if(k){ for(p=k;p<=j;p++)Calc(a[p].f); for(p=i;p<k;p++)Calc(a[p].f); }else for(p=i;p<=j;p++)Calc(a[p].f); } printf("%I64d\n",Ans); return 0;}
阅读全文
0 0
- codeforces830B Cards Sorting -- 线段树
- Codeforces 831-E.Cards Sorting(线段树)
- CodeForces830B【树状数组+线段树】
- [模拟][线段树]Codeforces Round #424. B Cards Sorting
- Codeforces-830B:Cards Sorting(树状数组+线段树)
- Codeforces Round #424 (Div. 2, )-树状数组|线段树-E. Cards Sorting
- Codeforces Round #424 E. Cards Sorting 线段树/数据结构瞎搞/模拟
- Codeforces830B
- codeforces 830B. Cards Sorting
- Codeforces B. Cards Sorting 【瞎搞】
- CF830B:Cards Sorting(思维)
- [线段树] hdu5195 DZY Loves Topological Sorting
- hdu5122K.Bro Sorting【线段树逆序数】
- HDU5649 DZY Loves Sorting 二分+线段树
- 线段树+二分 hdu5649 DZY Loves Sorting
- Codefoeces 387E - George and Cards 贪心+线段树
- codeforces 831 E Cards Sorting(bit+stl)
- Codeforces-831E Cards Sorting(树状数组)
- 当你完不成自己的程序时,就不要睡觉......
- mybatis进阶(5)--多对多查询
- centos7.2 安装hdp2.6.1.0
- iOS10富文本推送--NotificationServiceExtension
- POJ 3895 Cycles of Lanes(dfs+模拟)
- codeforces830B Cards Sorting -- 线段树
- 前端笔记——html(1)
- php7.1.6 + redis
- Bootstrap组件系列之福利篇几款好用的组件(推荐)
- Shell系列—Shell 输入/输出重定向
- XZ_iOS之崩溃信息的查看,调用堆栈的调试技巧
- 四种途径将HTML5 web应用变成android应用
- UILabel删除线不显示
- markdown语法