删除物品 bzoj-3192 JLOI-2013

题目大意:给你n个物品,分成2堆。所有的物品有不同的优先级。我只可以将一堆中的堆顶移动到另一个堆的堆顶。而如果当前物品是全局所有物品中优先级最高的,我可以直接将其删除。询问最小移动多少次,删除不计入总次数。

注释:$1\le n\le 10^5$。

想法:显然是两个栈。开始以为是每个堆中优先级最高的,然后一顿瞎想。如果是全局优先级最高的,就相当于弄两个栈,然后将两个栈顶对顶对到一起,开始指针在两个栈顶之间。那么栈顶的移动就相当于物品的移动。显然答案在序列给出后就是固定的,就是从当前点到整个序列最大值的的有多少个方块隔着,将答案加上即可。而这个找最大值的过程可以用树状数组实现。

最后,附上丑陋的代码... ...

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <cstdlib>
typedef long long ll;
using namespace std;
int n,m,tree[100005];
struct Node
{
int x,id;
}a[100005];
void del(int x)
{
for(int i=x;i<=n;i+=(i&(-i)))
tree[i]--;
}
int getsum(int x)
{
int t=0;
for(int i=x;i;i-=(i&(-i))) t+=tree[i]; return t;
}
bool cmp(Node u,Node v)
{
return u.x>v.x;
}
int main()
{
scanf("%d%d",&n,&m);
a[0].id=n;
for(int i=n;i;i--)
{
scanf("%d",&a[i].x);
a[i].id=i;
}
for(int i=1;i<=m;i++)
{
scanf("%d",&a[++n].x);
a[n].id=n;
}
sort(a+1,a+n+1,cmp);
for(int i=1;i<=n;i++)
tree[i]=(i&(-i));
ll ans=0;
for(int i=1;i<=n;i++)
{
if(a[i].id>a[i-1].id)
ans+=getsum(a[i].id-1)-getsum(a[i-1].id);
else
ans+=getsum(a[i-1].id)-getsum(a[i].id);
del(a[i].id);
}
printf("%lld\n",ans);
return 0;
}

小结:这种问题的转化是本质,剩下的实现反而显得平凡。

最新文章

  1. jmeter(六)元件的作用域与执行顺序
  2. CocoStudio基础教程(5)使用CocoStudio场景编辑器关联组件
  3. DWZ的选择带回功能无法带回第一个value中的值
  4. Bootstrap简单Demo(2015年05月-18日)
  5. -_-#【jQuery插件】Colorpicker 颜色选择器
  6. 基础命名空间:序列化 System.Runtime.Serialization
  7. 循环神经网络之LSTM和GRU
  8. pymysql.err.InternalError: (1205, &#39;Lock wait timeout exceeded; try restarting transaction&#39;)错误处理
  9. pc版qq登录及移动版qq登录的申请过程
  10. nginx日志的监控【转】
  11. 批量处理word所有回车行
  12. python内置函数整理
  13. 在imagenet预训模型上进行finetune
  14. sudo安装某一文件报错:E: 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用) E: 无法锁定管理目录(/var/lib/dpkg/),是否有其他进程正占用它?
  15. vuejs 组件通讯
  16. sql:inner join,left join,right join,full join用法及区别
  17. Win10传递优化设置技巧
  18. dedecms如何增加自定义字段
  19. yii 表单如何写,action指向哪里?
  20. 怎样搭建一个自有域名的 WORDPRESS 博客?

热门文章

  1. PCB genesis Slot槽转钻孔(不用G85命令)实现方法
  2. js addeventlistener 刮刮贴
  3. SpringMVC+Jquery实现Ajax
  4. 八皇后问题---详解---参考&lt;&lt;紫书&gt;&gt;
  5. [转]在 Linux 下使用 RAID
  6. NPOI复制模板导出Excel
  7. EF 新增数据时提示it has a DefiningQuery and no &lt;InsertFunction&gt; element exists in the &lt;ModificationFunctionMapping&gt; element
  8. sql语句优化:用join取代not in
  9. ansible publishing service
  10. jQuery——尺寸位置