Description

  一个叫做立方体大作战的游戏风靡整个Byteotia。这个游戏的规则是相当复杂的,所以我们只介绍他的简单规
则:给定玩家一个有2n个元素的栈,元素一个叠一个地放置。这些元素拥有n个不同的编号,每个编号正好有两个
元素。玩家每次可以交换两个相邻的元素。如果在交换之后,两个相邻的元素编号相同,则将他们都从栈中移除,
所有在他们上面的元素都会掉落下来并且可以导致连锁反应。玩家的目标是用最少的步数将方块全部消除。

Input

  第一行包含一个正整数n(1<=n<=50000)。接下来2n行每行一个数ai,从上到下描述整个栈,保证每个数出现且
仅只出现两次(1<=ai<=n)。初始时,没有两个相同元素相邻。并且保证所有数据都能在1000000步以内出解。

Output

  第一行包含一个数m,表示最少的步数。

题解:

考虑当前要消掉数字 $i$, 出现的位置分别为 $arr[i],brr[i]$,不难发现 $arr[i]$ 到 $brr[i]$ 之间的数字一定会在过程中被消掉(这样一定是最有策略).
我们思考一下我们为了消掉 $i$ 所需要单独执行的操作数.
那么一定是 $arr[i]$ 到 $brr[i]$ 之间可以消掉的全都消掉后,没被消掉的数的个数.
树状数组维护一波前缀和即可.
第一次 +1, 第二次 -1 加加减减搞一搞即可.

#include<bits/stdc++.h>
#define setIO(s) freopen(s".in","r",stdin)
#define maxn 10000000
using namespace std;
int C[maxn],pos[maxn];
int n,m,ans=0;
int lowbit(int t) { return t & (-t); }
void update(int x,int d)
{ while(x <= m) C[x] += d, x += lowbit(x);
}
int query(int x)
{int t=0;while(x>0) t+=C[x], x -= lowbit(x); return t;
}
int main()
{// setIO("input"); scanf("%d",&n), m=(n<<1); for(int i=1;i<=m;++i){int a; scanf("%d",&a);  if(!pos[a]){pos[a] = i; update(i, 1); }else {ans += query(i) - query(pos[a]); update(pos[a], -1); }}printf("%d\n",ans); return 0;
}

  

转载于:https://www.cnblogs.com/guangheli/p/10979208.html

BZOJ 1106: [POI2007]立方体大作战tet 树状数组 + 贪心相关推荐

  1. bzoj 1106: [POI2007]立方体大作战tet(贪心+树状数组)

    1106: [POI2007]立方体大作战tet Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 785  Solved: 574 [Submit][ ...

  2. BZOJ 1106: [POI2007]立方体大作战tet

    Description 一个叫做立方体大作战的游戏风靡整个Byteotia.这个游戏的规则是相当复杂的,所以我们只介绍他的简单规 则:给定玩家一个有2n个元素的栈,元素一个叠一个地放置.这些元素拥有n ...

  3. 1106: [POI2007]立方体大作战tet

    Description 一个叫做立方体大作战的游戏风靡整个Byteotia.这个游戏的规则是相当复杂的,所以我们只介绍他的简单规 则:给定玩家一个有2n个元素的栈,元素一个叠一个地放置.这些元素拥有n ...

  4. bzoj1106[POI2007]立方体大作战tet*

    bzoj1106[POI2007]立方体大作战tet 题意: 给定玩家一个有2n个元素的栈,这些元素拥有n个不同的编号,每个编号正好有两个元素.玩家每次可以交换两个相邻的元素.如果在交换之后,两个相邻 ...

  5. [POI2007]立方体大作战tet

    Description 一个叫做立方体大作战的游戏风靡整个Byteotia.这个游戏的规则是相当复杂的,所以我们只介绍他的简单规 则:给定玩家一个有2n个元素的栈,元素一个叠一个地放置.这些元素拥有n ...

  6. BZOJ 1103: [POI2007]大都市meg [DFS序 树状数组]

    1103: [POI2007]大都市meg Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 2221  Solved: 1179 [Submit][S ...

  7. BZOJ 1109 [POI2007]堆积木Klo(树状数组)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1109 [题目大意] Mary在她的生日礼物中有一些积木.那些积木都是相同大小的立方体. ...

  8. BZOJ - 2244 拦截导弹 (dp,CDQ分治+树状数组优化)

    BZOJ - 2244 拦截导弹 (dp,CDQ分治+树状数组优化) 1 #include<algorithm> 2 #include<iostream> 3 #include ...

  9. BZOJ 3289 Mato的文件管理 | 莫队 树状数组

    BZOJ 3289 Mato的文件管理 题意 求区间逆序对. 题解 在莫队的基础上使用树状数组求逆序对. 在当前区间左侧加入一个数时,res += 原区间比它小的数的个数: 在当前区间右侧加入一个数时 ...

  10. Bzoj 3289: Mato的文件管理 莫队,树状数组,逆序对,离散化,分块

    3289: Mato的文件管理 Time Limit: 40 Sec  Memory Limit: 128 MB Submit: 1539  Solved: 665 [Submit][Status][ ...

最新文章

  1. EXECL导入(检查服务器版本.包括NPOI方式导入.可以通过配置文件信息导入EXECL)代码记录下....
  2. LaTeX入门第三集!LaTeX的几个应用!
  3. 搞懂了这几点,你就学会了Web编程
  4. 2018年春阅读计划---阅读笔记5
  5. FFMPEG avformat_open_input
  6. 如何手动创建SAP S/4HANA的生产订单
  7. 东南大学4系短学期matlab,东南大学短学期混凝土教学实践
  8. 交互系统的构建之(二)Linux下鼠标和键盘的模拟控制
  9. json 转换 java odl_JSON与JAVA数据的转换
  10. auxiliary variable(辅助变量)的引入
  11. curl post json_Go Web编程--解析JSON请求和生成JSON响应
  12. 360驱动大师要怎么操作安装打印机驱动
  13. sw工程图导出bom_SOLIDWORKS如何快速生成BOM表格
  14. 机器学习-支持向量机原理
  15. 比特率控制模式ABR、VBR、CBR
  16. 2019.02 随笔(一)
  17. 强智教务php,强智科技教务处模拟登录
  18. 英语单词(持续更新)
  19. windwos系统安装python教程
  20. ET篇:ETBook笔记(1.2 为什么使用C# .net core做服务端?)

热门文章

  1. 创业项目黄了,我靠着被废弃的副业项目,年收入45亿,将公司做到了200多亿市值...
  2. 基于私有云的数据库高可用架构实践
  3. 整天说Code Review重要,你知道应该关注哪些关键点吗?
  4. 年薪 40w 的应届生
  5. 从甲骨文中国裁员说起
  6. 遍历一个List的几种方法
  7. 雪饮者 决策树系列(二)决策树应用
  8. MapReduce运行流程分析
  9. (笔试题)被3和5整除的数的和
  10. POJ 1089 Intervals 区间覆盖+ 贪心