hdu 5372 Segment Game 【 树状数组 】
给出一些操作,
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 【 树状数组 】的更多相关文章
- HDU 5372 Segment Game (树状数组)
题意是指第i此插入操作,插入一条长度为i的线段,左端点在b[i],删除某一条线段,问每次插入操作时,被当前线段完全覆盖的线段的条数. 题解:对于新插入的线段,查询有多少个线段左端点大于等于该线段的左端 ...
- HDU 3333 - Turing Tree (树状数组+离线处理+哈希+贪心)
题意:给一个数组,每次查询输出区间内不重复数字的和. 这是3xian教主的题. 用前缀和的思想可以轻易求得区间的和,但是对于重复数字这点很难处理.在线很难下手,考虑离线处理. 将所有查询区间从右端点由 ...
- HDU 3333 | Codeforces 703D 树状数组、离散化
HDU 3333:http://acm.hdu.edu.cn/showproblem.php?pid=3333 这两个题是类似的,都是离线处理查询,对每次查询的区间的右端点进行排序.这里我们需要离散化 ...
- HDU 3333 Turing Tree (树状数组)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3333 题意就是询问区间不同数字的和. 比较经典的树状数组应用. //#pragma comment(l ...
- HDU 4325 Flowers(树状数组+离散化)
http://acm.hdu.edu.cn/showproblem.php?pid=4325 题意:给出n个区间和m个询问,每个询问为一个x,问有多少个区间包含了x. 思路: 因为数据量比较多,所以需 ...
- hdu 5775 Bubble Sort 树状数组
Bubble Sort 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5775 Description P is a permutation of t ...
- HDU - 1541 Stars 【树状数组】
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1541 题意 求每个等级的星星有多少个 当前这个星星的左下角 有多少个 星星 它的等级就是多少 和它同一 ...
- HDU 3854 Glorious Array(树状数组)
题意:给一些结点,每个结点是黑色或白色,并有一个权值.定义两个结点之间的距离为两个结点之间结点的最小权值当两个结点异色时,否则距离为无穷大.给出两种操作,一种是将某个结点改变颜色,另一个操作是询问当前 ...
- HDU 3874 Necklace (树状数组 | 线段树 的离线处理)
Necklace Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total S ...
- HDU 5101 Select --离散化+树状数组
题意:n 组,每组有一些值,求 在不同的两组中每组选一个使值的和大于k的方法数. 解法:n * Cnt[n] <= 1000*100 = 100000, 即最多10^5个人,所以枚举每个值x,求 ...
随机推荐
- 'input propertychange' 当输入框文字改变时触发的事件!
$('.amount_input').bind('input propertychange', function() { console.log(2); $('.list label').remove ...
- 企业级任务调度框架Quartz(4) 多个job实例注册到任务调度器上
前序: 在第一个例子我看到了自定义的作业类在任务调度器上注册后,则通过任务调度器来实现启动:下面,我们将同一个作业类执行两个任务,并都将他们注册到任务调度器上! 首先一个job类指向两 ...
- IIS访问php页面问题,报告404错误
IIS访问php页面出现问题,所有php页面找不到,显示404页面,html页面可以正常访问. 搜索结果: 方案1: 打开WEB服务扩展,把“所有未知ISAPI扩展”设为允许! 方案2: PHP没有完 ...
- VS Code中编写html(4) 标签的宽高颜色背景设置
1 <!+Tab键--> <!--有两个div标签时,分别设置style,有两种方法--> <div id="div1">第一个div标签:& ...
- python简单的输入与输出
1 首先利用python完成简单的输出,运行如下: python和c语言类似,但又有所不同,python开发快,语言简洁,我是这样对比学的 输出:print+空格+'要输出的内容',一定要是英文状态下 ...
- HDU-6217 BBP Formula 脑洞
题目链接:https://cn.vjudge.net/problem/HDU-6217 题意 已知: \[ \pi = \sum_{k=0}^{\infty }\frac{1}{16^{k}}(\fr ...
- HDU1846 - Brave Game【巴什博弈】
十年前读大学的时候,中国每年都要从国外引进一些电影大片,其中有一部电影就叫<勇敢者的游戏>(英文名称:Zathura),一直到现在,我依然对于电影中的部分电脑特技印象深刻. 今天,大家选 ...
- apache https部署
1.生成证书,直接在阿里云或腾讯云中生成此处不再介绍 2.在httpd.conf中取消#LoadModule ssl_module modules/mod_ssl.so的注释 3.开启httpd-ss ...
- 用户登录记住用户名导致表单自动填充bug解决方法
最近做项目出现了一个极其讨厌的bug:在用户登录网站时,浏览器会自动提示是否记住密码,当选择记住密码时,正常浏览网页,会发现有那么几个input输入框会自动填充用户名,非常讨厌, 于是就觉得挺简单的一 ...
- Updates were rejected because the remote contains work that you do(gitee报错解决方案)
今天向Gitee远程仓库提交本地项目文件时,遇到了下列错误,很是郁闷 正在推送 1203笔记本Error: failed to push some refs to 'https://gitee.com ...