/**
多校联合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. hdoj--1829--A Bug's Life(带权并查集)

    A Bug's Life Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) To ...

  2. TestNG环境搭建以及框架初识

    TestNG的英文为Test Next Generation, 听上去好像下一代测试框架已经无法正常命名了的样子,哈哈,言归正传,啥是TestNG呢,它是一套测试框架,在原来的Junit框架的思想基础 ...

  3. [Swift]注册并购买加入Apple开发者计划。提示: “你的支付授权失败。请核对你的信息并重试,或尝试其他支付方式。请联系你的银行”

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  4. JS——BOM操作(基本用法与实现:open()、close()、scrollTop等了解)

    (1)window.open() 定义和用法 open() 方法用于打开一个新的浏览器窗口或查找一个已命名的窗口 语法 window.open(URL,name,specs,replace) [默认填 ...

  5. java中的访问修饰符2

    综上所述:protected强调的是子类,deafult强调的是本包,private强调的是本类,public强调的是开放性.

  6. 修改Visual Studio2010的主题颜色

    第一步:打开工具->扩展管理器 第二步:搜素visual studio color theme editor 第三步:找到Visual Studio Color Theme Editor 第四步 ...

  7. ts中类的继承

    定义类 class Person { name: string; //属性 constructor(_name: string) { this.name = _name; } //构造函数 sayHe ...

  8. IE不支持 ES6 Promise 对象的解决方案

    * 引入bluebird.js即可完美解决. /*ie兼容 Promise*/ isIE(); function isIE() { //ie? if ( !! window.ActiveXObject ...

  9. 在APP开发中,如何优雅的设计APP页面

    1.明确页面设计在整个产品设计中的位置 互联网产品设计的流程大致是:产品定位——需求分析——信息架构设计——流程设计——页面框架设计——设计说明——输出设计文档.可以看到页面设计是处于整个流程的后期, ...

  10. 应用Struts2框架,开发一个加法器,采用两个页面,一个页面输入数据,另一个界面输出结果。

    软件152谭智馗 一.新建maven项目 1.选择菜单file—new—maven project,勾选“Create a &simple project (skip archetype se ...