又是一道玄学乱搞

本来我感觉是写两颗splay然后翻转什么的,后来发现可以乱搞

就是把第一个栈反过来,两个栈拼起来, 然后记录一个分割点,从大到小模拟,移动分割点,中间的经过的没被删除的元素就用树状数组维护下

#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long LL;
int read()
{int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while('0'<=ch&&ch<='9'){x=x*10+ch-'0';ch=getchar();}return x*f;
}int n,m;
LL s[110000];
int lowbit(int x){return x&-x;}
void change(int x,int k)
{while(x<=105000){s[x]+=k;x+=lowbit(x);}
}
int getsum(int x)
{int ret=0;while(x>0){ret+=s[x];x-=lowbit(x);}return ret;
}struct node{int k,id;}a[110000];
bool cmp(node n1,node n2){return n1.k>n2.k;}
int lslen,ls[110000];
void LSH()
{lslen=m;for(int i=1;i<=m;i++)ls[i]=a[i].k;sort(ls+1,ls+lslen+1);lslen=unique(ls+1,ls+lslen+1)-ls-1;for(int i=1;i<=m;i++)a[i].k=lower_bound(ls+1,ls+lslen+1,a[i].k)-ls;
}//init
int main()
{freopen("a.in","r",stdin);freopen("a.out","w",stdout);n=read(),m=read();for(int i=1;i<=n;i++)a[n-i+1].k=read(), a[i].id=i;for(int i=n+1;i<=n+m;i++)a[i].k=read(), a[i].id=i;m+=n;n++;LSH();sort(a+1,a+m+1,cmp);//n表示第n-1个位置和第n个位置不在一个栈中 for(int i=1;i<=m;i++)change(i,1);LL ans=0;for(int i=1;i<m;i++){if(a[i].id<n-1){ans+=getsum(n-1)-getsum(a[i].id);}else if(n<a[i].id) {ans+=getsum(a[i].id-1)-getsum(n-1);}change(a[i].id,-1);n=a[i].id+1;}printf("%lld\n",ans);return 0;
}

转载于:https://www.cnblogs.com/AKCqhzdy/p/9228674.html

bzoj3192: [JLOI2013]删除物品相关推荐

  1. bzoj3192: [JLOI2013]删除物品(树状数组)

    既然要从一个堆的堆顶按顺序拿出来放到第二个堆的堆顶,那么我们就可以把两个堆顶怼在一起,这样从一个堆拿到另一个堆只需要移动指针就好了. 换句话说,把1~n倒着,n+1到n+m正着,用一个指针把两个序列分 ...

  2. bzoj3192 [JLOI2013]删除物品 树状数组

    每次操作一定是直接换到当前最大的,所以相当于来回移动求移动次数 把两个栈拼在一起就是一个队列,然后就直接查询个数+删点统计答案,用树状数组 码: #include<iostream> #i ...

  3. 【JLOI2013合集】BZOJ3090 赛车 BZOJ3091 卡牌游戏 BZOJ3092 删除物品 BZOJ3093 地形生成...

    赛车: 这个题就是水平可见直线.. 水平可见直线怎么做呢.. 就是把所有直线按斜率排序.然后从前往后处理边. 当中维护一个栈.如果当前线和栈顶的交点在栈顶和栈顶-1的交点左边.那么弹掉栈顶.. (可以 ...

  4. 退役前的做题记录1.0

    退役前的做题记录1.0 租酥雨最近很懒qwq,具体表现在写题的时候不想发题解了. 但是想想这样也不太好,就决定发个一句话(半句话到几句话不等)题解上来. 2018-09.18-2018-09.28 [ ...

  5. 重走长征路---OI每周刷题记录---8月16日 2014

    总目录详见https://blog.csdn.net/mrcrack/article/details/84471041 做题原则,找不到测评地址的题不做.2018-11-28 重走长征路---OI每周 ...

  6. [POI2007]TET-Tetris Attack

    如果两个相同的数之间有x个未匹配的数,那么肯定要经过x次交换,所以与 [JLOI2013]删除物品类似,只要不做无效交换,交换数是一定的. 对于方案来讲,交换的位置是对于堆底的,所以当两个物品删除后, ...

  7. BZOJ ac100题存档

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

  8. 我的世界服务器物品绑定插件,我的世界灵魂绑定插件详解

    我的世界灵魂绑定插件详解.那下面给大家分享的是关于灵魂插件的用途详细介绍,还有关于我的世界服务器防止熊孩子盗窃插件用途介绍哦~希望对大家有所帮助. 游戏园我的世界官方群:325049520(已满)二群 ...

  9. 我的世界服务器物品代码,我的世界指令代码大全 2021通用指令代码汇总[多图]...

    我的世界指令代码还有很多玩家都不清楚,那么手机版和电脑版通用指令是什么,大家输入什么代码可以使用,还不知道的玩家一起来看看吧. 我的世界2021通用指令代码汇总 /kill @e[type = evo ...

最新文章

  1. SSL/TLS协议信息泄露漏洞(CVE-2016-2183)【原理扫描】远程桌面 3389 Windows 2016
  2. (二)线程同步_3---在类中使用相互独立的属性同步
  3. Linux之环境变量
  4. Taro+react开发(58) toHtml
  5. 前端学习(1930)vue之电商管理系统电商系统之美化一层循环的UI结构删除业务逻辑实现
  6. 向后台接口传递FormData格式的数组对象
  7. C11标准委员会成员解读C语言新标准
  8. 崛起于Springboot2.X之Mysql读写分离(6)
  9. java switch 类型_Java switch case数据类型原理解析
  10. “一张图”解释特色小镇发展历程
  11. 《梦断代码》读书笔记——第3、4、5章
  12. 全向轮运动特性分析(图片版)
  13. Linux计划任务at命令、crontab命令
  14. 修改树莓派上Transmission设置提高同时下载任务数量
  15. 2022年安全员-A证考题模拟考试平台操作
  16. switch语句表达式和执行流程
  17. An Apple a day keeps the doctor away
  18. python统计不同字符的个数
  19. 让 Odoo POS 支持廉价小票打印机
  20. 714. [C++]买卖股票的最佳时机含手续费

热门文章

  1. Christmas Present
  2. Java内存模型与线程(思维导图)
  3. 4循环队列的顺序表示中,为什么要空一个位置?
  4. C语言程序设计之十六进制显示
  5. Windows程序设计之创建窗口示例
  6. 法媒评马云996:亚洲独有的洗脑我们不懂
  7. USB和串口(COM)的区别,以及相互转换
  8. linux安装manjaro创建分区失败,如何安装Manjaro Linux [最强指南]? 看完就知道了
  9. 开根号的笔算算法图解_机器学习KNN算法之手写数字识别
  10. File类及相关方法介绍