BZOJ1106[POI2007]立方体大作战tet - 树状数组

时间:2022-09-04 08:21:32

描述

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

题解

我们首先能大胆猜测,如果两个相同元素中间有一个在只出现一次的元素, 那么需要交换一次。

接下来我们只要求出每种元素的区间内有几个只出现一次的元素。

一次扫过$2 * n$个元素, 如果这种元素在之前没有出现过, 那么把该位置值记为 $1$

如果这种元素已经出现过, 那么把之前出现过的位置值记为-1, 当前位置值记为$1$

利用前缀和快速求出同种元素构成区间中的值的和, 并计入答案。

最后输出答案 $\div$ 2

利用树状数组可以查询前缀和, 单点修改。

代码

 #include<cstring>
#include<cstdio>
#include<algorithm>
#define rd read()
using namespace std; const int N = 1e6 + 1e5; int l[N], sum[N], n; int read() {
int X = , p = ; char c = getchar();
for(; c > '' || c < ''; c = getchar()) if(c == '-') p = -;
for(; c >= '' && c <= ''; c = getchar()) X = X * + c - '';
return X * p;
} int lowbit(int x) {
return x & (-x);
} void add(int x, int d) {
for(; x <= * n; x += lowbit(x)) sum[x] += d;
} int query(int x) {
int re = ;
for(; x; x -= lowbit(x)) re += sum[x];
return re;
} int main()
{
n = rd;
int ans = ;
for(int i = ; i <= * n; ++i) {
int x = rd;
if(l[x]) {
ans += query(i) - query(l[x]);
add(l[x], -);
add(i, );
}
else {
add(i, );
l[x] = i;
}
}
printf("%d\n",ans >> );
}

BZOJ1106[POI2007]立方体大作战tet - 树状数组的更多相关文章

  1. bzoj 1106 &lbrack;POI2007&rsqb;立方体大作战tet 树状数组优化

    [POI2007]立方体大作战tet Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 821  Solved: 601[Submit][Status][ ...

  2. BZOJ 1106&colon; &lbrack;POI2007&rsqb;立方体大作战tet 树状数组 &plus; 贪心

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

  3. BZOJ1106&colon; &lbrack;POI2007&rsqb;立方体大作战tet

    1106: [POI2007]立方体大作战tet Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 419  Solved: 302[Submit][St ...

  4. BZOJ 1106&colon; &lbrack;POI2007&rsqb;立方体大作战tet

    1106: [POI2007]立方体大作战tet Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 682  Solved: 496[Submit][St ...

  5. BZOJ 1106 &lbrack;POI2007&rsqb;立方体大作战tet(树状数组)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1106 [题目大意] 给定玩家一个有2n个元素的栈,元素一个叠一个地放置. 这些元素拥有 ...

  6. &lbrack;POI2007&rsqb;立方体大作战tet

    题目 BZOJ 洛谷 做法 很巧妙的题,注意每种颜色只有两个 消除一种颜色,其实就是看中间有多少个没有被消除的块,这种动态距离问题显然能用树状数组解决 洛谷输出方案,暴力往下爬就行 My comple ...

  7. bzj1106&colon; &lbrack;POI2007&rsqb;立方体大作战tet

    比较玄幻的题目. 考虑两个不同的元素 假设位置是 a...a...b...b... 那么不需要通过交换ab来消除ab,各自弄就行 若是 a...b...b...a... 那也没必要交换,先把b消掉就好 ...

  8. &lbrack;BZOJ 1106&rsqb; &lbrack;POI2007&rsqb; 立方体大作战tet 【树状数组】

    题目链接:BZOJ - 1106 题目分析 从1到2n枚举每一个位置. 如果枚举到某一个数,这个数已经是第二次出现,那么就看它和第一次出现的位置之间有多少数还没有被匹配,有多少没有匹配的就要进行多少次 ...

  9. 【BZOJ】1106&colon; &lbrack;POI2007&rsqb;立方体大作战tet

    题意 给定一个长度为\(2n(1 \le n \le 500000)\)的序列,\(1\)~\(n\)各出现两次,可以交换相邻两项,两个同样的数放在一起会对消,求把所有数对消的最小交换次数. 分析 如 ...

随机推荐

  1. java JFileChooser选择文件和保存文件

    //文件过滤器import java.io.File; import javax.swing.filechooser.FileFilter; public class MyFilter extends ...

  2. windows系统下Tomcat与Apache服务器集成

    说明:此文是看书真实试验成功的,书中提到了不同版本不兼容的问题,但是很荣幸我没碰到,此例可供参考. 本文假设你已经有了java环境和tomcat,你已经熟悉tomcat的应用. Jdk 1.7.0_5 ...

  3. Windows Server 2003服务器&period;net4&period;0&plus;IIS6&period;0的服务器&comma;IE11浏览器访问的不兼容性

    工作中发生了一件诡异的事情: 程序在Win7+.NET4.0+IIS7.5的服务器部署,IE8和IE11请求时,响应的样式都正常. 但是在美的同事反映说,Windows Server 2003服务器. ...

  4. &lpar;转&rpar;Unity3D游戏开发 NGUI之渐变加载到100&percnt;的Loading场景进度条

    NGUI 现有的进度条存在的问题: 进度条跳跃式前进,加载到90%后卡住,突然进入下一个场景.接下来就是解决这个问题. 背景 通常游戏的主场景包含的资源较多,这会导致加载场景的时间较长.为了避免这个问 ...

  5. 小组开发项目针对性的NABC分析

    单独就我们团队开发项目——重力解锁的功能特点而言,我们解决了智能手机屏幕解锁的乏味和繁琐的特点,显得更有趣味性和独特性,更符合现代人追随时尚的潮流:我们根据个人的不同喜好和便利性来设定一些动作,利用重 ...

  6. 轻松学Shell之认识正规表达式

    离线下载观看:http://down.51cto.com/data/148117   650) this.width=650;" onclick='window.open("htt ...

  7. VMware虚拟化培训手册

    一.VMware虚拟化架构概述 1.1VMware虚拟化架构图 如上图所示,虚拟化由物理主机(即ESXI主机).虚拟化管理程序(vCenter Server).虚拟机(操作系统).存储等基本组成. 1 ...

  8. python unittest addCleanup中也加失败截图功能

    在python web自动化测试中失败截图方法汇总一文中提到了失败截图的方法 但在实际测试中,如果我们的测试用例中加了addCleanups动作,如果addCleanups中动作失败了,就不会截图.那 ...

  9. HOOK 底层键盘消息---WH&lowbar;KEYBOARD&lowbar;LL

    代码:屏蔽三个全局快捷键 代码的作用是屏蔽掉凝视中的三个快捷键. LRESULT CALLBACK LowLevelKeyboardProc (INT nCode, WPARAM wParam, LP ...

  10. Beta阶段DAY3

    一.提供当天站立式会议照片一张 二.每个人的工作 1.讨论项目每个成员的昨天进展 刘阳航:尝试改进UI,美化界面. 林庭亦:调整难度设置. 郑子熙:尝试改进UI,美化界面. 陈文俊:调整难度设置. 2 ...