给出一些操作,

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. a rel=noopener

    看vue-element-admin的源码的时候,看到a 标签使用  rel=noopener: 然后就很奇怪这个是干什么用的:然后百度到一篇文章,涨知识了. 个人的理解是:不加 rel=noopen ...

  2. virtualenv 虚拟环境依赖安装

    虚拟环境依赖安装 开发要学会用 virtualenv 来管理多个开发环境 Ubuntu/Centos/MacOS 下 virtualenvwrapper 使得virtualenv变得更好用,所以我们一 ...

  3. 路飞学城Python-Day115

    个人博客搭建 from django.db import models from django.contrib.auth.models import User, AbstractUser # Crea ...

  4. 前端html之------>Table实现表头固定

    文章来源于:https://www.cnblogs.com/dacuotecuo/p/3657779.html,请尊重原创,转载请注明出处. 说明:这里主要实现了表头的固定和上下滚动的滑动实现:时间的 ...

  5. python的包装和授权

    包装:python为大家提供了标准数据类型,以及丰富的内置方法,其实在很多场景下我们都需要基于标准数据类型来定制我们自己的数据类型,新增/改写方法,这就用到了我们刚学的继承/派生知识(其他的标准类型均 ...

  6. Project Euler 14 Longest Collatz sequence

    题意:对于任意一个数 N ,寻找在 100,0000 之内按照规则( N 为奇数 N = N * 3 + 1 ,N 为偶数 N = N / 2 ,直到 N = 1 时的步数 )步数的最大值 思路:记忆 ...

  7. 【ACM-ICPC 2018 南京赛区网络预赛 E】AC Challenge

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 写个DP 设f[j]表示已经做的题的状态为j的情况下接着选能获得的最大分数. 显然是个倒推. 记忆化搜索一波 dfs(i,j) 表示 ...

  8. JavaScript(DOM编程三)

    节点的移动,insertBefore <body> <p>你喜欢哪个城市?</p> <ul id="city"><li id= ...

  9. 使用githug游戏提高git水平

  10. Java n个线程轮流打印数字的问题

    一. 实现两个线程.轮流打印出数字.例如以下: bThread --> 10 aThread --> 9 bThread --> 8 aThread --> 7 bThread ...