Description

排排坐,吃果果,生果甜嗦嗦,大家笑呵呵。你一个,我一个,大的分给你,小的留给我,吃完果果唱支歌,大家乐和和。红星幼儿园的小朋友们排起了长长地队伍,准备吃果果。不过因为小朋友们的身高有所区别,排成的队伍高低错乱,极不美观。设第i个小朋友的身高为hi,我们定义一个序列的杂乱程度为:满足ihj的(i,j)数量。幼儿园阿姨每次会选出两个小朋友,交换他们的位置,请你帮忙计算出每次交换后,序列的杂乱程度。为方便幼儿园阿姨统计,在未进行任何交换操作时,你也应该输出该序列的杂乱程度。

Input

第一行为一个正整数n,表示小朋友的数量;第二行包含n个由空格分隔的正整数h1,h2,…,hn,依次表示初始队列中小朋友的身高;第三行为一个正整数m,表示交换操作的次数;以下m行每行包含两个正整数ai和bi¬,表示交换位置ai与位置bi的小朋友。

Output

输出文件共m行,第i行一个正整数表示交换操作i结束后,序列的杂乱程度。

Sample Input

【样例输入】
3
130 150 140
2
2 3
1 3

Sample Output

1
0
3
树状数组套treap,挺好理解的……
只是有点慢……
#include<cstdio>
#include<cstdlib>
#include<algorithm>
using namespace std;int n,m,l,r,ans=0,o,p,num=0;
inline int read(){p=0;o=getchar();while(o<'0'||o>'9') o=getchar();while(o>='0'&&o<='9') p=p*10+o-48,o=getchar();return p;
}
int root[20001],a[20001];
struct tree{int l,r,k,ra,w,f,s;tree(){s=f=l=r=0;}
};
tree t[2000000];
inline void ler(int &p){int k=t[p].r;t[p].r=t[k].l;t[k].l=p;t[k].s=t[p].s;t[p].s=t[t[p].l].s+t[t[p].r].s+t[p].w;p=k;
}
inline void rir(int &p){int k=t[p].l;t[p].l=t[k].r;t[k].r=p;t[k].s=t[p].s;t[p].s=t[t[p].l].s+t[t[p].r].s+t[p].w;p=k;
}
inline void insert(int &p,int k){if (p==0){p=++num;t[p].k=k;t[p].w=1;t[p].s=1;t[p].ra=rand();return;}t[p].s++;if (t[p].k==k) t[p].w++;elseif (t[p].k>k){insert(t[p].l,k);if (t[t[p].l].ra<t[p].ra) rir(p);}else{insert(t[p].r,k);if (t[t[p].r].ra<t[p].ra) ler(p);}
}
inline void dell(int &p){if (t[p].l==0&&t[p].r==0) p=0;elseif (t[p].l==0) ler(p),dell(t[p].l);elseif (t[p].r==0) rir(p),dell(t[p].r);elseif (t[t[p].l].ra<t[t[p].r].ra) rir(p),dell(t[p].r);else ler(p),dell(t[p].l);
}
inline void del(int &p,int k){if (p==0) return;t[p].s--;if (k==t[p].k){t[p].w--;if (!t[p].w) dell(p);return;}if (k<t[p].k) del(t[p].l,k);else del(t[p].r,k);
}
inline int qua(int p,int k){if (p==0) return 0;if (t[p].k==k) return t[t[p].r].s;elseif (t[p].k>k) return qua(t[p].l,k)+t[p].w+t[t[p].r].s;else return qua(t[p].r,k);
}
inline int qui(int p,int k){if (p==0) return 0;if (t[p].k==k) return t[t[p].l].s;elseif (t[p].k>k) return qui(t[p].l,k);else return qui(t[p].r,k)+t[p].w+t[t[p].l].s;
}
inline int lo(int x){return x&(-x);}
inline void in(int i,int k){while(i<=n){insert(root[i],k);i+=lo(i);}
}
inline void de(int i,int k){while(i<=n){del(root[i],k);i+=lo(i);}
}
inline int ask(int x,int k){int s=0;while(x>0){s+=qua(root[x],k);x-=lo(x);}return s;
}
inline int aski(int x,int k){int s=0;while(x>0){s+=qui(root[x],k);x-=lo(x);}return s;
}
int main(){register int i,j;n=read();for (i=1;i<=n;i++) in(i,a[i]=read());for (i=1;i<=n;i++) ans+=ask(i,a[i]);m=read();printf("%d\n",ans);while(m--){l=read();r=read();if (r<l) swap(r,l);ans+=(ask(r-1,a[l])-ask(l,a[l]))-(aski(r-1,a[l])-aski(l,a[l]))+(aski(r-1,a[r])-aski(l,a[r]))-((ask(r-1,a[r])-ask(l,a[r])));if (a[l]>a[r]) ans--;else if (a[l]<a[r]) ans++;printf("%d\n",ans);if (!m) return 0;de(l,a[l]);de(r,a[r]);swap(a[l],a[r]);in(l,a[l]);in(r,a[r]);}
}

转载于:https://www.cnblogs.com/Enceladus/p/5183003.html

bzoj:2141: 排队相关推荐

  1. BZOJ 2141 排队(块套树,分块,树状数组)【BZOJ修复工程】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 题目链接 https://hydro.ac/d/bzoj/p/2141 是 hydro 的 BZOJ ...

  2. bzoj 2141 : 排队 (cdq分治+bit)

    链接: https://www.lydsy.com/JudgeOnline/problem.php?id=2141 思路: 其实就是求动态逆序对...cdq降维,用树状数组前后求两遍逆序对就好了 切水 ...

  3. BZOJ ac100题存档

    不知不觉AC100题了,放眼望去好像都是水题.在这里就做一个存档吧(特别感谢各位大神尤其是云神http://hi.baidu.com/greencloud和丽洁姐http://wjmzbmr.com/ ...

  4. php pcntl fork使用,php中pcntl_fork详解

    pcntl_fork()函数是php-pcntl模块中用于创建进程的函数.(不支持windows) 至于php_pcntl扩展如何安装开启这里就不介绍了,只分析pcntl_fork()这个函数本身. ...

  5. [颓废史]蒟蒻的刷题记录

    QAQ蒟蒻一枚,其实我就是来提供水题库的. 以下记录从2016年开始. 1.1 1227: [SDOI2009]虔诚的墓主人 树状数组+离散化 3132: 上帝造题的七分钟 树状数组 二维区间加减+查 ...

  6. bzoj 1636 bzoj 1699: [Usaco2007 Jan]Balanced Lineup排队(RMQ)

    1699: [Usaco2007 Jan]Balanced Lineup排队 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 1514  Solved:  ...

  7. bzoj 1731 [Usaco2005 dec]Layout 排队布局——差分约束

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1731 对差分约束理解更深.还发现美妙博客:http://www.cppblog.com/me ...

  8. bzoj 1699: [Usaco2007 Jan]Balanced Lineup排队【st表||线段树】

    要求区间取min和max,可以用st表或线段树维护 st表 #include<iostream> #include<cstdio> using namespace std; c ...

  9. bzoj 1731: [Usaco2005 dec]Layout 排队布局【差分约束】

    差分约束裸题,用了比较蠢的方法,先dfs_spfa判负环,再bfs_spfa跑最短路 注意到"奶牛排在队伍中的顺序和它们的编号是相同的",所以\( d_i-d_{i-1}>= ...

  10. bzoj 1226 学校食堂

    时间限制:1秒 内存限制:64M [问题描述] 小F的学校在城市的一个偏僻的角落,所有学生只好在学校食堂吃饭.学校有一个食堂,虽然简陋,但食堂大厨总能做出让同学满意的菜肴.当然,不同的人的口味也不一定 ...

最新文章

  1. 资源 | 盘点国外NLP领域40大高校及相关知名学者
  2. RHEL6基础四十二之RHEL文件共享①NFS
  3. Matlab-重构和重新排列数组
  4. linux_unix编程手册--信号处理函数
  5. Notepad++技巧
  6. 监督学习 | 线性回归 之多元线性回归原理及Sklearn实现
  7. Python笔记-windows平台中Flask打包成exe
  8. freebsd 运行linux,Freebsd 下运行 QQ For Linux 的方法
  9. 【学习资源分享】在线学习平台推荐
  10. oracle 罗马数字处理,阿拉伯数字转罗马数字(Roman Numeral Converter)
  11. npy/npz/pkl/csv长字符串存储
  12. PHP在线网课问答题库搜索,推荐一个大学mooc网课答案题库在线查询公众号
  13. azure mysql on vnet_Azure Database for MySQL (2) VNET rules
  14. 政治正确的睡前故事(4则)【搬运】【破事水】
  15. TensorFlow: A System for Large-Scale Machine Learning翻译
  16. 5 JMeter断言-Jmeter响应中出现乱码时
  17. 一个计算机爱好者的不完整回忆(八)一种加密方式
  18. 路由器WAN网口可接入192.168.0.1管理无线密码
  19. 稳压二极管数据手册参数补充
  20. Android 线程池的使用

热门文章

  1. android触摸屏idc,android4.0触摸屏滑鼠模式解决方法-添加idc文件
  2. centos安装 mysql_centos下安装MySQL数据库
  3. python写论文有帮助吗_python中有帮助函数吗
  4. 手把手教你Windows环境下配置Git环境
  5. 5.2自动扫描及装配数据
  6. 【渝粤教育】电大中专电子线路作业 题库
  7. 【渝粤教育】21秋期末考试组织行为学10068k2
  8. [渝粤题库] 国家开放大学 人文英语4 资料
  9. JD_Source Code for problem 1379
  10. BZOJ5074 小B的数字