给出一些操作,

0是将第i次增加的线段放在b位置,第i次放的线段的长度为i

1是将第b次增加操作放的线段删除

每次增加操作完之后,询问这条线段上面的完整的线段的条数

每次询问统计比这条线段左端点大的线段的条数 L,比这条线段右端点大的线段的条数 R,两个相减就是完整的线段的条数

另外因为给的b很大,所以需要离散化一下,而且b可能会相同,所以相同大小的应该占据一个编号

然后就像求逆序对那样的算

 #include<iostream>
#include<cstdio>
#include<cstring>
#include <cmath>
#include<stack>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<algorithm>
using namespace std; typedef long long LL;
const int INF = (<<)-;
const int mod=;
const int maxn=; int n;
int a[maxn],c[maxn],b[maxn]; int lowbit(int x){ return x &(-x);} int sum1(int x){
int ret =;
while(x>){
ret+=c[x];x-=lowbit(x);
}
return ret;
} void add1(int x,int d){
while(x<=maxn){
c[x]+=d;x+=lowbit(x);
}
} int sum2(int x){
int ret =;
while(x>){
ret+=b[x];x-=lowbit(x);
}
return ret;
} void add2(int x,int d){
while(x<=maxn){
b[x]+=d;x+=lowbit(x);
}
} struct node{
int x,y;
int l,r;
int lb,ub;
int id;
int idx;
}; int cmp1(node n1,node n2){
return n1.l < n2.l;
} int cmp2(node n1,node n2){
return n1.r < n2.r;
} node p[maxn],cmd[maxn],add[maxn]; int main(){
int q;
int kase = ;
while(scanf("%d",&q) != EOF){
memset(a,,sizeof(a));
memset(b,,sizeof(b));
memset(c,,sizeof(c)); int cnt = ;
for(int i = ;i <= q;i++){
scanf("%d %d",&cmd[i].x,&cmd[i].y);
if(cmd[i].x == ){
cmd[i].id = cnt;
add[cnt].l = cmd[i].y; p[cnt].l = cmd[i].y;
add[cnt].r = add[cnt].l + cnt;p[cnt].r = add[cnt].l + cnt;
add[cnt].idx = cnt;p[cnt].idx = cnt;
cnt++;
}
}
printf("Case #%d:\n",++kase); sort(p+,p+cnt,cmp1);
for(int i=,j=;i< cnt;i++){
if(i==||p[i].l != p[i-].l) j++;
add[p[i].idx].lb=j;
} sort(p+,p+cnt,cmp2);
for(int i=,j=;i< cnt;i++){
if(i==||p[i].r != p[i-].r) j++;
add[p[i].idx].ub=j;
} for(int i = ;i <= q;i++){
if(cmd[i].x == ){
int k = cmd[i].id;
int c1 = add[k].lb;
int c2 = add[k].ub;
int l = (k-) - sum1(c1 -);
int r = (k-)- sum2(c2 );
int ans = abs(l-r);
printf("%d\n",ans);
add1(c1,);add2(c2,);
}
if(cmd[i].x == ){
int k = cmd[i].y;
int c1 = add[k].lb;
int c2 = add[k].ub;
int d1 = sum1(c1) - sum1(c1-);
if(d1 != ) add1(c1,-); int d2 = sum2(c2) - sum2(c2-);
if(d2 != ) add2(c2,-);
}
}
}
return ;
}

hdu 5372 Segment Game 【 树状数组 】的更多相关文章

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

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

  2. HDU 3333 - Turing Tree (树状数组+离线处理+哈希+贪心)

    题意:给一个数组,每次查询输出区间内不重复数字的和. 这是3xian教主的题. 用前缀和的思想可以轻易求得区间的和,但是对于重复数字这点很难处理.在线很难下手,考虑离线处理. 将所有查询区间从右端点由 ...

  3. HDU 3333 | Codeforces 703D 树状数组、离散化

    HDU 3333:http://acm.hdu.edu.cn/showproblem.php?pid=3333 这两个题是类似的,都是离线处理查询,对每次查询的区间的右端点进行排序.这里我们需要离散化 ...

  4. HDU 3333 Turing Tree (树状数组)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3333 题意就是询问区间不同数字的和. 比较经典的树状数组应用. //#pragma comment(l ...

  5. HDU 4325 Flowers(树状数组+离散化)

    http://acm.hdu.edu.cn/showproblem.php?pid=4325 题意:给出n个区间和m个询问,每个询问为一个x,问有多少个区间包含了x. 思路: 因为数据量比较多,所以需 ...

  6. hdu 5775 Bubble Sort 树状数组

    Bubble Sort 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5775 Description P is a permutation of t ...

  7. HDU - 1541 Stars 【树状数组】

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1541 题意 求每个等级的星星有多少个 当前这个星星的左下角 有多少个 星星 它的等级就是多少 和它同一 ...

  8. HDU 3854 Glorious Array(树状数组)

    题意:给一些结点,每个结点是黑色或白色,并有一个权值.定义两个结点之间的距离为两个结点之间结点的最小权值当两个结点异色时,否则距离为无穷大.给出两种操作,一种是将某个结点改变颜色,另一个操作是询问当前 ...

  9. HDU 3874 Necklace (树状数组 | 线段树 的离线处理)

    Necklace Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total S ...

  10. HDU 5101 Select --离散化+树状数组

    题意:n 组,每组有一些值,求 在不同的两组中每组选一个使值的和大于k的方法数. 解法:n * Cnt[n] <= 1000*100 = 100000, 即最多10^5个人,所以枚举每个值x,求 ...

随机推荐

  1. Linux 中文件名颜色所代表的属性

    1. 白色:表示一般文件 2. 蓝色:表示目录 3. 绿色:表示可执行的文件或程序 4. 浅蓝色:表示链接文件 5. 黄色:表示设备文件 6. 灰色:表示其他类型文件 7. 红色:表示压缩文件或者包文 ...

  2. LSTM比较RNN

    LSTM只能避免RNN的梯度消失(gradient vanishing),但是不能对抗梯度爆炸问题(Exploding Gradient). 梯度膨胀(gradient explosion)不是个严重 ...

  3. Flask-SQLAlchemy中解决数据库连接1366报错

    报错信息:Warning: (1366, "Incorrect string value: '\\xD6\\xD0\\xB9\\xFA\\xB1\\xEA...' for column 'V ...

  4. /etc/default/useradd文件内容及对应功能

    1.GROUP=100 #依赖于/etc/login.defs的USE RGRUUPS_ENAB参数,如果为no,则在此处控制 2.HOME=/home #把用户的家路径健在/home中 3.INAC ...

  5. leetCode笔记--binary tree

    993. Cousins in Binary Tree In a binary tree, the root node is at depth 0, and children of each dept ...

  6. Python 使用matplotlib模块模拟掷骰子

    掷骰子 骰子类 # die.py 骰子类模块 from random import randint class Die(): """骰子类""&quo ...

  7. Python之Mail编程

    # Mail编程- 管理程序 - Euroda使邮件普及 - Netscape,outlook,forxmail后来居上 - Hotmail使用浏览器发送邮件 ## 邮件工作流程- MUA邮件用户代理 ...

  8. IAR for MSP430 关于添加自定义头文件的两种方法【转】

    前言:第一次接触这个软件,编译一个例程一直出现没有包含头文件的错误,在网上找了好几个方法都没什么效果,看到了篇文章,利用里面的方法1解决了,特此复制下来保存学习用. 原文链接:https://blog ...

  9. SSM知识巩固

    ------------------------- 绑定页面提交的多个数据  绑定数组 --------------------------------------- 绑定list(需求:批量修改商品 ...

  10. 16 个 Linux 服务器监控命令

    如果你想知道你的服务器正在做干什么,你就需要了解一些基本的命令,一旦你精通了这些命令,那你就是一个 专业的 Linux 系统管理员. 有些 Linux 发行版会提供 GUI 程序来进行系统的监控,例如 ...