/**
多校联合2015-muti7-1004
<a target=_blank href="http://acm.hdu.edu.cn/showproblem.php?pid=5372">HDU 5372 Segment Game
<span style="font-family: Arial, Helvetica, sans-serif;"></span><span style="font-family: Arial, Helvetica, sans-serif;"></a></span>
树状数组
*/
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#define maxn 400005
#define ll __int64
using namespace std;
int cl[maxn],cr[maxn];
int a[maxn],b[maxn];
int op[maxn];
int dis[maxn],cor;
int n;
void insert(int c[],int i,int val){
// cout<<n<<endl;
while(i<=cor){
c[i]+=val;
i+=(i&(-i));
}
}
int query_sum(int c[],int i){
int s=0;
while(i>0){
s+=c[i];
i-=(i&(-i));
}
return s;
}
int query(int c[],int last){
if(last>cor) return 0;
return query_sum(c,cor)-query_sum(c,last-1);
}
void Init(){
memset(cl,0,sizeof(cl));
memset(cr,0,sizeof(cr));
cor=0;
}
void disc(){ //离散化数组去重
sort(dis,dis+cor);
int t=0;
for(int i=1;i<cor;i++){
if(dis[i]==dis[i-1]) t++;
else dis[i-t]=dis[i];
}
cor-=t;
}
int index(int num){//返回离散值
return lower_bound(dis,dis+cor,num)-dis+1;
}
int main(){
int ii=1;
while(~scanf("%d",&n)){
printf("Case #%d:\n",ii++);
Init();
int l,r,A=1;
for(int i=0;i<n;i++){
scanf("%d%d",&a[i],&b[i]);
if(a[i]==0){
dis[cor++]=b[i];
dis[cor++]=b[i]+A;
A++;
}
}
disc();
A=1;
int ans=0;
for(int i=0;i<n;i++){
if(a[i]==0){
l=index(b[i]);
r=index(b[i]+A);
//左端点及阻断点后的左端点与右端点后的右端点之差即为所求
ans=(query(cl,l)-query(cr,r+1));
printf("%d\n",ans);
insert(cl,l,1);
insert(cr,r,1);
op[A]=b[i];
A++;
}
else{
l=index(op[b[i]]);
r=index(op[b[i]]+b[i]);
insert(cl,l,-1);
insert(cr,r,-1);
}
}
}
return 0;
}

HDU 5372 Segment Game的更多相关文章

  1. 当前插入的线段能完整覆盖存在的几条线段 树状数组 HDU 5372 Segment Game

    http://acm.hdu.edu.cn/showproblem.php? pid=5372 Segment Game Time Limit: 3000/1500 MS (Java/Others)  ...

  2. 2015 Multi-University Training Contest 7 hdu 5372 Segment Game

    Segment Game Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Tota ...

  3. HDU 5372 Segment Game (树状数组)

    题意是指第i此插入操作,插入一条长度为i的线段,左端点在b[i],删除某一条线段,问每次插入操作时,被当前线段完全覆盖的线段的条数. 题解:对于新插入的线段,查询有多少个线段左端点大于等于该线段的左端 ...

  4. hdu 5372 Segment Game 【 树状数组 】

    给出一些操作, 0是将第i次增加的线段放在b位置,第i次放的线段的长度为i 1是将第b次增加操作放的线段删除 每次增加操作完之后,询问这条线段上面的完整的线段的条数 每次询问统计比这条线段左端点大的线 ...

  5. hdu 1558 Segment set 线段相交+并查集

    Segment set Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Prob ...

  6. HDU HDU1558 Segment set(并查集+判断线段相交)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1558 解题报告:首先如果两条线段有交点的话,这两条线段在一个集合内,如果a跟b在一个集合内,b跟c在一 ...

  7. hdu 1558 Segment set

    Segment set Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tota ...

  8. hdu 5666 Segment 俄罗斯乘法或者套大数板子

    Segment Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Problem ...

  9. HDU 5666 Segment 数论+大数

    题目链接: hdu:http://acm.hdu.edu.cn/showproblem.php?pid=5666 bc(中文):http://bestcoder.hdu.edu.cn/contests ...

随机推荐

  1. luogu1226 取余运算||快速幂

    题目大意:快速求$a^b\mod p$的值. 根据二进制,令$b=\sum t_k\cdot 2^k, t\in \{0,1\}$,那么$$a^b=a^{\sum t_k\cdot 2^k}\mod ...

  2. [Javascript] 轻量级的JavaScript日期处理类库xDate使用指南

    XDate是一个请谅解的JavaScript的原生Date对象的封装库,提供增强的功能解析,格式化和日期处理.使用起来就和JavaScript自己的对象和方法一样,非常简单. XDate是一个请谅解的 ...

  3. JavaScript全局函数

    JavaScript 中包含以下 7 个全局函数,用于完成一些常用的功能(以后的章节中可能会用到):escape( ).eval_r( ).isFinite( ).isNaN( ).parseFloa ...

  4. Css float 盒子模型 position

    属性: float 浮动 浮动的内容用div包起来,给div设置宽高 clear 清除浮动. box-sizing 标准模式下的盒模型 content-box:(默认属性) padding和borde ...

  5. JavaScript中的数组创建

    JavaScript中的数组创建 数组是一个包含了对象或原始类型的有序集合.很难想象一个不使用数组的程序会是什么样. 以下是几种操作数组的方式: 初始化数组并设置初始值 通过索引访问数组元素 添加新元 ...

  6. 4185 Oil Skimming 最大匹配 奇偶建图

    题目大意: 统计相邻(上下左右)的‘#’的对数. 解法: 与题目hdu1507 Uncle Tom's Inherited Land*类似,需要用奇偶建图.就是行+列为奇数的作为X集合,偶尔作为Y集合 ...

  7. Nagios Windows客户端NSClient++ 0.4.x安装配置

    NSClient++ 0.3.x和NSClient++ 0.4.x的配置完全不一样,官方的文档也没有全部更新.我记录下自己的一些操作.   一.下载安装NSClient++ 1.到http://nsc ...

  8. 使用QT的一些小Tipster

    1.在使用Qt Creator编程时,难免会用到将float类型转换为QString类型的方法:原文 1.1. 将QString类型转化为float类型,很简单 QString data;       ...

  9. day27-3 matplatlib模块

    目录 matplotlib 条形图 折线图 散点图 matplotlib 图形可视化,主要用来画图 别问,问就是看不懂 条形图 import matplotlib.pyplot as plt # 只识 ...

  10. Python笔记9-----不等长列表转化成DataFrame

    1.不同长度的列表合并成DataFrame. 法1: ntest=['a','b'] ltest=[[1,2],[4,5,6]] 先变成等长的列表:(a:1),(a:2),(b:4),(b:5),(b ...