当时考试时间剩下太短了然后就挂掉了。。其实是个简单的数据结构。

话说一看最小还以为是动规呢。。
将两堆头对头排。比如样例就是 541|273
因为是必须有优先级次序,依次拿的话,看优先级大小相邻的两个物品位置,中间隔着多少其他物品就行了。因为你要移动相邻的两个,你肯定得把它们中间的所有物品移动一遍(因为两个都得先后在最上边)。
标好号,用前缀和,拿树状数组维护,拿走之后变为0。
  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<cmath>
  5. #include<algorithm>
  6. using namespace std;
  7. #define N 200000
  8. #define pos(i,a,b) for(int i=(a);i<=(b);i++)
  9. int n1,n2;
  10. int n;
  11. inline int read()
  12. {
  13. int su=0;
  14. char ch=getchar();
  15. while(ch<'0'||ch>'9')
  16. ch=getchar();
  17. while(ch<='9'&&ch>='0')
  18. {
  19. su=su*10+ch-'0';
  20. ch=getchar();
  21. }
  22.  
  23. return su;
  24. }
  25. struct haha
  26. {
  27. int num;
  28. int pos;
  29. }cun[N];
  30. int c[N];
  31. inline int lowbit(int x)
  32. {
  33. return x&(-x);
  34. }
  35. inline void add(int i,int x)
  36. {
  37. while(i<=n)
  38. {
  39. c[i]+=x;
  40. i+=lowbit(i);
  41. }
  42. }
  43. int temp;
  44. inline int cmp(const haha &a,const haha &b)
  45. {
  46. return a.num>b.num;
  47. }
  48. int ans;
  49. inline int tot(int x)
  50. {
  51. int sum=0;
  52. while(x>0)
  53. {
  54. sum+=c[x];
  55. x-=lowbit(x);
  56. }
  57. return sum;
  58. }
  59. inline int Sum(int i,int j)
  60. {
  61. if(tot(j)>tot(i-1))
  62. return tot(j)-tot(i-1);
  63. else
  64. return tot(i)-tot(j-1);
  65. }
  66. inline int haha()
  67. {
  68. n1=read();
  69. n2=read();
  70. n=n1+n2;
  71. pos(i,1,n1)
  72. {
  73. cun[i].num=read();
  74. if(cun[i].num>temp)
  75. {
  76. temp=cun[i].num;
  77. ans=i;
  78. }
  79. cun[i].pos=n1-i+1;
  80. }
  81. pos(i,1,n2)
  82. {
  83. cun[n1+i].num=read();
  84. if(cun[n1+i].num>temp)
  85. {
  86. temp=cun[n1+i].num;
  87. ans=i;
  88. }
  89. cun[n1+i].pos=n1+i;
  90. }
  91. sort(cun+1,cun+n1+n2+1,cmp);
  92. ans--;
  93. pos(i,1,n)
  94. add(i,1);
  95.  
  96. add(cun[1].pos,-1);
  97. //cout<<tot(n);
  98. pos(i,2,n)
  99. {
  100. ans+=Sum(cun[i].pos,cun[i-1].pos);
  101. ans--;
  102. add(cun[i].pos,-1);
  103. }
  104. printf("%d",ans);
  105. }
  106. int sb=haha();
  107. int main()
  108. {;;}

  

[JLOI2013]删除物品 树状数组的更多相关文章

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

    3192: [JLOI2013]删除物品 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 872  Solved: 508[Submit][Status ...

  2. 1057. Stack (30) - 树状数组

    题目如下: Stack is one of the most fundamental data structures, which is based on the principle of Last ...

  3. [bzoj3192][JLOI2013]删除物品_树状数组_栈

    删除物品 bzoj-3192 JLOI-2013 题目大意:给你n个物品,分成2堆.所有的物品有不同的优先级.我只可以将一堆中的堆顶移动到另一个堆的堆顶.而如果当前物品是全局所有物品中优先级最高的,我 ...

  4. BZOJ 3192: [JLOI2013]删除物品(树状数组)

    题面: https://www.lydsy.com/JudgeOnline/problem.php?id=3192 题解: 首先每次一定是来回移动直到最大的到顶上. 所以我们可以将第两个堆的堆顶接起来 ...

  5. BZOJ 3192: [JLOI2013]删除物品 奇淫技巧&树状数组

    点我看题 这题十分奇淫技巧...QAQ因为知道是树状数组的题QAQ刚开始以为维护两个数组的树状数组然后模拟从大到小,然后发现不会打QAQ 于是悄悄咪咪翻开题解了. 实际上两个数组可以看做一个数组 如 ...

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

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

  7. HDU-3436 Queue-jumpers 树状数组 | Splay tree删除,移动

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3436 树状数组做法<猛戳> Splay tree的经典题目,有删除和移动操作.首先要离散化 ...

  8. Educational Codeforces Round 87 (Rated for Div. 2) D树状数组加二分删除的值

    Sample Input 5 4 1 2 3 4 5 -5 -1 -3 -1 Sample Output 3 思路,首先发现a[i]的值的范围是在1~n之间,每次插入我们可以直接把cnt[a[i]]+ ...

  9. 3192: [JLOI2013]删除物品

    3192: [JLOI2013]删除物品 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 1366 Solved: 794 [Submit][Statu ...

随机推荐

  1. AngularJS模块

    方式一: <body ng-app="myApp"> <div ng-controller="myCtrl1"> <h1>{ ...

  2. Cmake新手使用日记(1)【C++11下的初体验】

    第一次使用Cmake,搜索了很多使用教程,包括<Cmake实践>.<Cmake手册>等,但是在针对最新的C++11条件下编程还是会存在一点点问题,需要实验很多次错误并搜索大量文 ...

  3. .NET C#到Java没那么难,MVC篇

    最典型的JAVA MVC就是JSP + servlet + javabean的模式.比较好的MVC,老牌的有Struts.Webwork.新兴的MVC 框架有Spring MVC.Tapestry.J ...

  4. C#工作笔记

    没想到一个Java后端开发还要负责C#桌面程序,我感觉有点方.不过方归方,活还是要干的.简单记录下学到的一些知识点. 1.引用API函数 namespace Demo { class MyUtil { ...

  5. 二、redis集群搭建

    redis集群搭建 redis3.0后支持集群.集群中应该至少有三个节点,每个节点有一备份节点.需要6台服务器.搭建伪分布式,需要6个redis实例.搭建集群的步骤: 一.安装单机版redis 第一步 ...

  6. Gulp安装流程、使用方法及cmd常用命令导览

    Gulp安装流程.使用方法及CMD常用命令导览 来自前端小白的gulp及周边知识学习总结 一.名词介绍: Npm--node包管理工具 一开始我不理解,包管理工具是什么鬼.后来用到的gulp也好,gu ...

  7. React 实践项目 (三)

    React在Github上已经有接近70000的 star 数了,是目前最热门的前端框架.而我学习React也有一段时间了,现在就开始用 React+Redux 进行实战! 上回说到使用Redux进行 ...

  8. Office365开发系列——开发一个全功能的Word Add-In

    2016年10月我参加了在北京举行的DevDays Asia 2016 - Office 365应用开发”48小时黑客马拉松“,我开发的一个Word Add-In Demo——WordTemplate ...

  9. Eclipse安装反编译工具JadClipse for Eclipse手把手教程

    今天闲来无事准备弄弄eclipse的反编译工具JadClipse for Eclipse,百度经验里也说的比较清楚只是两个文件下载地址没有明确 net.sf.jadclipse_3.3.0.jar   ...

  10. 【一步一步】Spring 源码环境搭建

    平时项目中基本上都会用到spring,但是源码还没有深入的了解过.趁这段时间稍微空闲点,开始研究下spring 源码.下面是spring 源码的环境搭建. 主要分为如下步骤: ①安装jdk,gradl ...