BZOJ 1106 [POI2007]立方体大作战tet(树状数组)
【题目链接】 http://www.lydsy.com/JudgeOnline/problem.php?id=1106
【题目大意】
给定玩家一个有2n个元素的栈,元素一个叠一个地放置。
这些元素拥有n个不同的编号,每个编号正好有两个元素。
玩家每次可以交换两个相邻的元素。如果在交换之后,两个相邻的元素编号相同,
则将他们都从栈中移除,所有在他们上面的元素都会掉落下来并且可以导致连锁反应。
玩家的目标是用最少的步数将方块全部消除。
【题解】
我们发现如果有一对可消除的方块在另一对中间,那么肯定是这一对先消除更优
因此我们用模拟消除的过程,对于每种颜色,记录其上次出现的位置,
如果一个方块未被消除,则在树状数组中记录为1,否则记录为0,
那么一个颜色与其上一次出现的位置在树状数组中的查询前缀和之差就是消除时要消耗的移动距离。
【代码】
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
typedef long long LL;
const int N=50010;
int pre[N],c[N<<1],n;
void add(int x,int val){while(x<=2*n)c[x]+=val,x+=x&-x;}
int query(int x){int s=0;while(x)s+=c[x],x-=x&-x;return s;}
int main(){
while(~scanf("%d",&n)){
memset(pre,0,sizeof(pre));
memset(c,0,sizeof(c));
LL ans=0;
for(int i=1;i<=n*2;i++){
int x; scanf("%d",&x);
if(pre[x]){
ans+=query(i)-query(pre[x]);
add(pre[x],-1);
}else add(pre[x]=i,1);
}printf("%lld\n",ans);
}return 0;
}
BZOJ 1106 [POI2007]立方体大作战tet(树状数组)的更多相关文章
- bzoj 1106 [POI2007]立方体大作战tet 树状数组优化
[POI2007]立方体大作战tet Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 821 Solved: 601[Submit][Status][ ...
- BZOJ 1106: [POI2007]立方体大作战tet 树状数组 + 贪心
Description 一个叫做立方体大作战的游戏风靡整个Byteotia.这个游戏的规则是相当复杂的,所以我们只介绍他的简单规 则:给定玩家一个有2n个元素的栈,元素一个叠一个地放置.这些元素拥有n ...
- BZOJ1106[POI2007]立方体大作战tet - 树状数组
描述 一个叫做立方体大作战的游戏风靡整个Byteotia.这个游戏的规则是相当复杂的,所以我们只介绍他的简单规则:给定玩家一个有2n个元素的栈,元素一个叠一个地放置.这些元素拥有n个不同的编号,每个编 ...
- BZOJ 1106: [POI2007]立方体大作战tet
1106: [POI2007]立方体大作战tet Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 682 Solved: 496[Submit][St ...
- [BZOJ 1106] [POI2007] 立方体大作战tet 【树状数组】
题目链接:BZOJ - 1106 题目分析 从1到2n枚举每一个位置. 如果枚举到某一个数,这个数已经是第二次出现,那么就看它和第一次出现的位置之间有多少数还没有被匹配,有多少没有匹配的就要进行多少次 ...
- 【BZOJ】1106: [POI2007]立方体大作战tet
题意 给定一个长度为\(2n(1 \le n \le 500000)\)的序列,\(1\)~\(n\)各出现两次,可以交换相邻两项,两个同样的数放在一起会对消,求把所有数对消的最小交换次数. 分析 如 ...
- BZOJ1106: [POI2007]立方体大作战tet
1106: [POI2007]立方体大作战tet Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 419 Solved: 302[Submit][St ...
- [POI2007]立方体大作战tet
题目 BZOJ 洛谷 做法 很巧妙的题,注意每种颜色只有两个 消除一种颜色,其实就是看中间有多少个没有被消除的块,这种动态距离问题显然能用树状数组解决 洛谷输出方案,暴力往下爬就行 My comple ...
- bzj1106: [POI2007]立方体大作战tet
比较玄幻的题目. 考虑两个不同的元素 假设位置是 a...a...b...b... 那么不需要通过交换ab来消除ab,各自弄就行 若是 a...b...b...a... 那也没必要交换,先把b消掉就好 ...
随机推荐
- POj 2104 K-th Number (分桶法+线段树)
题目链接 Description You are working for Macrohard company in data structures department. After failing ...
- JS 控制页面刷新
.页面自动刷新:把如下代码加入<head>区域中 <meta http-equiv=">,其中20指每隔20秒刷新一次页面. .页面自动跳转:把如下代码加入<h ...
- STM32-内存管理
转载:http://www.cnblogs.com/guozhikai/p/6031904.html #ifndef __MALLOC_H #define __MALLOC_H #include &q ...
- AMD嵌入式G系列SoC协助优化Gizmo 2开发板
http://www.gizmosphere.org/ AMD嵌入式G系列SoC协助优化Gizmo 2开发板 http://news.zol.com.cn/491/4910444.html
- EOS.IO技术学习
如今很火的项目EOS的学习,以下主要的内容是基于白皮书 参考: http://chainx.org/paper/index/index/id/20.html EOS.IO软件引入了一种新的块链架构,旨 ...
- git clone命令
从远程clone一个仓库 ...知识浅薄 git clone都发现貌似用的不顺 因为我有几个git账号 但是我也不知道就是git账号是怎么保存在终端上的 所以当我需要用一个新的github账号来clo ...
- apche服务器在Window和Linux下常用命令
1.Window 1.1 启动.重启.停止——方式一(httpd) httpd.exe [-D name] [-d directory] [-f file] [-C "directive&q ...
- 解决网页中Waiting (TTFB)数据加载过慢的问题
解决网页中Waiting (TTFB)数据加载过慢的问题 最近做了一个网页,在本地测试良好,数据可以得到很快的反馈,但是当部署到云端Linux上时候,就会出现加载缓慢的问题.本地测试,得到数据大概3s ...
- lr计算程序执行消耗时间的比较:
去除程序执行的两种方式: 1.通过一个事务:在需要消除的代码段,使用lr_wasted_time(wasteTime); querySubmit() { char newStr4[10000]=&qu ...
- 启动WAMPSERVER出现计算机中丢失 MSVCR110.dll
最近电脑因为系统损坏无法启动,不得已重装系统,也让PHP程序员雷雪松下决心坚决的抛弃XP系统.这样一来跟上时代的步伐,二来也为Win7的市场占有率和消灭IE7以下浏览器做点贡献.,作为一个PHP程序员 ...