bzoj 4631: 踩气球 线段树合并
4631: 踩气球
Time Limit: 10 Sec Memory Limit: 256 MB
Submit: 265 Solved: 136
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
1 1 1 1 1
5 5
2 2
1 3
5
4
2
5
2
3
Sample Output
1
1
2
3
【样例说明】
实际上每次操作的盒子是: 4 2 1 3 5
在第二次操作后,第二个熊孩子会高兴 (区间[2,2]中的气球已经全部被踩爆)。
在第四次操作后,第三个熊孩子会高兴(区间[1,3]中的气球已经全部被踩爆)。
在第五次操作后,第一个熊孩子会高兴(区间[5,5]中的气球已经全部被踩爆)。
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#define N 100005
using namespace std;
int n,m;
int c[N],now;
struct node
{
int l,r,sum;
}a[N*];int cnt;
void add(int x,int l,int r,int z)
{
if(l==r)
{
a[x].sum++;
return ;
}
int mid=(l+r)>>;
if(z<=mid)
{
if(!a[x].l)a[x].l=++cnt;
add(a[x].l,l,mid,z);
}
else
{
if(!a[x].r)a[x].r=++cnt;
add(a[x].r,mid+,r,z);
}
a[x].sum=a[a[x].l].sum+a[a[x].r].sum;
return ;
}
int f[N];
int find(int x)
{
if(f[x]==x)return x;
return f[x]=find(f[x]);
}
int la=;
int root[N];
void del(int x,int l,int r,int z)
{
if(l==r)
{
la+=a[x].sum;
a[x].sum=;
return ;
}
int mid=(l+r)>>;
if(z<=mid)
{
if(a[a[x].l].sum)del(a[x].l,l,mid,z);
}
if(a[a[x].r].sum)del(a[x].r,mid+,r,z);
a[x].sum=a[a[x].l].sum+a[a[x].r].sum;
return ;
}
void merge(int x,int y,int l,int r)
{
if(l==r)
{
a[x].sum+=a[y].sum;
return ;
}
int mid=(l+r)>>;
if(a[x].l)
{
if(a[y].l)merge(a[x].l,a[y].l,l,mid);
}
else a[x].l=a[y].l;
if(a[x].r)
{
if(a[y].r)merge(a[x].r,a[y].r,mid+,r);
}
else a[x].r=a[y].r;
a[x].sum=a[a[x].r].sum+a[a[x].l].sum;
return ;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)scanf("%d",&c[i]);
for(int i=;i<=n;i++)root[i]=++cnt;
for(int i=;i<=n;i++)f[i]=i;
int t1,t2;
for(int i=;i<=m;i++)
{
scanf("%d%d",&t1,&t2);
add(root[t2],,n,t1);
}
int q;scanf("%d",&q); for(int i=;i<=q;i++)
{
scanf("%d",&t1);
t1=(t1-+la)%n+;
c[t1]--;
if(c[t1]==)
{
f[t1]=t1-;
int aa=find(t1);
del(root[t1],,n,aa+);
merge(root[aa],root[t1],,n);
}
printf("%d\n",la);
}
return ;
}
bzoj 4631: 踩气球 线段树合并的更多相关文章
- bzoj 4631: 踩气球 线段树
题目: Description 六一儿童节到了, SHUXK 被迫陪着M个熊孩子玩一个无聊的游戏:有N个盒子从左到右排成一排,第i个盒子里装着Ai个气球. SHUXK 要进行Q次操作,每次从某一个盒子 ...
- 【BZOJ-4631】踩气球 线段树 + STL
4631: 踩气球 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 224 Solved: 114[Submit][Status][Discuss] ...
- BZOJ.3545.[ONTAK2010]Peaks(线段树合并)
题目链接 \(Description\) 有n个座山,其高度为hi.有m条带权双向边连接某些山.多次询问,每次询问从v出发 只经过边权<=x的边 所能到达的山中,第K高的是多少. \(Solut ...
- BZOJ:5457: 城市(线段树合并)(尚待优化)
5457: 城市 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 18 Solved: 12[Submit][Status][Discuss] Des ...
- [Luogu P4215] 踩气球 (线段树)
题面 传送门:https://www.luogu.org/problemnew/show/P4215 Solution 这题十分有意思. 首先,我们可以先想想离线做法,因为在线做法可以从离线做法推出. ...
- bzoj 4756 Promotion Counting —— 线段树合并
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4756 合并子树的权值线段树: merge 返回 int 或者是 void 都可以. 代码如下 ...
- 【bzoj4631】踩气球 线段树
题解: 真是很zz 我都想到线段树分治的思路了... 不过还是一道好题 首先跟线段树分治一样将区间投射到线段树上去 每次修改如果该个区间修改为0,则对他们对应的特定区间-1 这样每个区间会有一次变0, ...
- BZOJ 4631 踩气球
BZOJ上内存小了会WA.... 线段树上挂链表. #include<iostream> #include<cstdio> #include<cstring> #i ...
- 【BZOJ 4631】4631: 踩气球 (线段树)
4631: 踩气球 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 316 Solved: 153 Description 六一儿童节到了, SHUX ...
随机推荐
- Base64Util 工具类
package com.org.utils; import java.io.ByteArrayOutputStream; public class Base64Util { private stati ...
- JS设置cookie、读取cookie、删除cookie(转载)
JavaScript是运行在客户端的脚本,因此一般是不能够设置Session的,因为Session是运行在服务器端的.而cookie是运行在客户端的,所以可以用JS来设置cookie.假设有这样一种情 ...
- python高速排序
import random def rand(n): for i in range(n): yield random.randint(0,1000) #创建一个随机数列表 def createList ...
- 【MEVN架构】mongodb+ express + vue + nodejs 搭建后台
前端技术栈:vue2 + vuex + vue-router + webpack + ES6/7 + less + element-ui 服务端技术栈:nodejs + express + mongo ...
- Luence
Luence 是Apache软件基金会的一个项目,是一个开发源码的全文检索引擎工具包,是一个全文检索引擎的一个架构.提供了完成的查询引擎和检索引擎,部分文本分析引擎. 全文检索程序库,虽然与搜索引擎相 ...
- kettle学习笔记(五)——kettle输出步骤
一.概述 数据库表: • 表输出 • 更新,删除,插入/更新 • 批量加载(mysql,oracle) • 数据同步 文件: • SQL 文件输出 • 文本文件输出 • XML 输出 • Excel ...
- 网络对抗技术 2017-2018-2 20152515 Exp1 PC平台逆向破解 笔记
Exp1 PC平台逆向破解 1.堆栈不可保护: ROP 2.alsr 随机化: 填充NOPS "\90" 3.不加堆栈保护 shellcode: 1.不依赖外部函数 2.不含\00 ...
- 20155216 实验一 逆向与Bof基础
实验一 逆向与Bof基础 一.直接修改程序机器指令,改变程序执行流程 使用 objdump -d pwn1 对pwn1文件进行反汇编. 可知main函数跳转至foo函数,先要使main函数跳转至get ...
- 20155310 《网络攻防》Exp4 恶意代码分析
20155310 <网络攻防>Exp4 恶意代码分析 基础问题 1.如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监控下系统一天天的到底在干些什么.请设计下你想监控的操作有哪些, ...
- C# Language Specification 5.0 (翻译)第二章 词法结构
程序 C# 程序(program)由至少一个源文件(source files)组成,其正式称谓为编译单元(compilation units)[1].每个源文件都是有序的 Unicode 字符序列.源 ...