BZOJ 1106: [POI2007]立方体大作战tet 树状数组 + 贪心
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 树状数组 + 贪心相关推荐
- bzoj 1106: [POI2007]立方体大作战tet(贪心+树状数组)
1106: [POI2007]立方体大作战tet Time Limit: 10 Sec Memory Limit: 162 MB Submit: 785 Solved: 574 [Submit][ ...
- BZOJ 1106: [POI2007]立方体大作战tet
Description 一个叫做立方体大作战的游戏风靡整个Byteotia.这个游戏的规则是相当复杂的,所以我们只介绍他的简单规 则:给定玩家一个有2n个元素的栈,元素一个叠一个地放置.这些元素拥有n ...
- 1106: [POI2007]立方体大作战tet
Description 一个叫做立方体大作战的游戏风靡整个Byteotia.这个游戏的规则是相当复杂的,所以我们只介绍他的简单规 则:给定玩家一个有2n个元素的栈,元素一个叠一个地放置.这些元素拥有n ...
- bzoj1106[POI2007]立方体大作战tet*
bzoj1106[POI2007]立方体大作战tet 题意: 给定玩家一个有2n个元素的栈,这些元素拥有n个不同的编号,每个编号正好有两个元素.玩家每次可以交换两个相邻的元素.如果在交换之后,两个相邻 ...
- [POI2007]立方体大作战tet
Description 一个叫做立方体大作战的游戏风靡整个Byteotia.这个游戏的规则是相当复杂的,所以我们只介绍他的简单规 则:给定玩家一个有2n个元素的栈,元素一个叠一个地放置.这些元素拥有n ...
- BZOJ 1103: [POI2007]大都市meg [DFS序 树状数组]
1103: [POI2007]大都市meg Time Limit: 10 Sec Memory Limit: 162 MB Submit: 2221 Solved: 1179 [Submit][S ...
- BZOJ 1109 [POI2007]堆积木Klo(树状数组)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1109 [题目大意] Mary在她的生日礼物中有一些积木.那些积木都是相同大小的立方体. ...
- BZOJ - 2244 拦截导弹 (dp,CDQ分治+树状数组优化)
BZOJ - 2244 拦截导弹 (dp,CDQ分治+树状数组优化) 1 #include<algorithm> 2 #include<iostream> 3 #include ...
- BZOJ 3289 Mato的文件管理 | 莫队 树状数组
BZOJ 3289 Mato的文件管理 题意 求区间逆序对. 题解 在莫队的基础上使用树状数组求逆序对. 在当前区间左侧加入一个数时,res += 原区间比它小的数的个数: 在当前区间右侧加入一个数时 ...
- Bzoj 3289: Mato的文件管理 莫队,树状数组,逆序对,离散化,分块
3289: Mato的文件管理 Time Limit: 40 Sec Memory Limit: 128 MB Submit: 1539 Solved: 665 [Submit][Status][ ...
最新文章
- EXECL导入(检查服务器版本.包括NPOI方式导入.可以通过配置文件信息导入EXECL)代码记录下....
- LaTeX入门第三集!LaTeX的几个应用!
- 搞懂了这几点,你就学会了Web编程
- 2018年春阅读计划---阅读笔记5
- FFMPEG avformat_open_input
- 如何手动创建SAP S/4HANA的生产订单
- 东南大学4系短学期matlab,东南大学短学期混凝土教学实践
- 交互系统的构建之(二)Linux下鼠标和键盘的模拟控制
- json 转换 java odl_JSON与JAVA数据的转换
- auxiliary variable(辅助变量)的引入
- curl post json_Go Web编程--解析JSON请求和生成JSON响应
- 360驱动大师要怎么操作安装打印机驱动
- sw工程图导出bom_SOLIDWORKS如何快速生成BOM表格
- 机器学习-支持向量机原理
- 比特率控制模式ABR、VBR、CBR
- 2019.02 随笔(一)
- 强智教务php,强智科技教务处模拟登录
- 英语单词(持续更新)
- windwos系统安装python教程
- ET篇:ETBook笔记(1.2 为什么使用C# .net core做服务端?)