2018牛客多校6 - I Team Rocket KD树维护空间
题意:给出n条铁路区间\([L,R]\),共有m个boom依时间顺序放置在\(k_i\)中,区间与\(k_i\)有交集的都被炸掉
求每次炸掉的铁路个数和最后输出所有id被炸的时间点
炸弹能炸到的区间满足\(L≤K≤R\)
因为\(L\)与\(R\)无关,将其关系改写为\(X≤K≤Y\),
对应于二维空间,铁路区间相当于一个点\((L,R)\),每次询问有多少个没被屏蔽的点满足\(X≤K\)且\(K≤Y\)
然后KD树乱搞剪枝就好
唯一的问题是屏蔽掉的点无法在push_up时再次更新两个维度的极左极右值\(lx,rx\)(要么再多维护次左次右值)
幸好没被卡(反而跑的贼快
#include<bits/stdc++.h>
#define rep(i,j,k) for(register int i=j;i<=k;i++)
#define rrep(i,j,k) for(register int i=j;i>=k;i--)
#define erep(i,u) for(register int i=head[u];~i;i=nxt[i])
#define print(a) printf("%lld",(ll)a)
#define println(a) printf("%lld\n",(ll)a)
#define printbk(a) printf("%lld ",(ll)a)
#define IOS ios::sync_with_stdio(0)
using namespace std;
const int MAXN = 3e5+11;
const int INF = 0x3f3f3f3f;
const double EPS = 1e-7;
typedef long long ll;
const ll MOD = 998244353;
ll read(){
ll x=0,f=1;register char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
}
int D,CLOCK;
int ans[MAXN];
ll sum,prod;
struct POINT{
int x[2],idx;
bool operator < (const POINT &rhs) const{
return x[D]<rhs.x[D];
}
}p[MAXN];
struct KD{
int lx[MAXN][2],rx[MAXN][2];
int son[MAXN][2],size[MAXN];
int mark[MAXN];
int root;
#define lc son[o][0]
#define rc son[o][1]
void pu(int o){
size[o]=mark[o];
if(lc) size[o]+=size[lc];
if(rc) size[o]+=size[rc];
rep(i,0,1){
if(lc&&lx[lc][i]<lx[o][i]) lx[o][i]=lx[lc][i];
if(rc&&lx[rc][i]<lx[o][i]) lx[o][i]=lx[rc][i];
if(lc&&rx[lc][i]>rx[o][i]) rx[o][i]=rx[lc][i];
if(rc&&rx[rc][i]>rx[o][i]) rx[o][i]=rx[rc][i];
}
}
int build(int d,int l,int r){
int mid=l+r>>1; D=d; mark[mid]=1;
nth_element(p+l,p+mid,p+r+1);
rep(i,0,1) lx[mid][i]=rx[mid][i]=p[mid].x[i];
size[mid]=1;son[mid][0]=son[mid][1]=0;
if(l<mid) son[mid][0]=build(d^1,l,mid-1);
if(r>mid) son[mid][1]=build(d^1,mid+1,r);
pu(mid);
return mid;
}
void query(int o,int k){
if(!o) return;
if(!size[o]) return;
if(lx[o][0]>k||rx[o][1]<k) return;
if(mark[o]&&p[o].x[0]<=k&&p[o].x[1]>=k){
ans[p[o].idx]=CLOCK;
sum++; prod=(prod*p[o].idx)%MOD;
mark[o]=0;
}
if(lc) query(lc,k);
if(rc) query(rc,k);
pu(o);
}
}kd;
int main(){
int T=read(),kase=0,n,m;
while(T--){
n=read(); m=read();
rep(i,1,n){
p[i].x[0]=read();
p[i].x[1]=read();
p[i].idx=i;
}
memset(ans,0,sizeof ans);
//kd.baoli();
kd.root=kd.build(0,1,n);
ll lastans=0; CLOCK=0;
printf("Case #%d:\n",++kase);
while(m--){
sum=0; prod=1;
ll pos=lastans^read();
++CLOCK;
kd.query(kd.root,pos);
println(sum);
if(sum) lastans=prod;
else lastans=0;
}
rep(i,1,n){
if(i==n) println(ans[i]);
else printbk(ans[i]);
}
}
return 0;
}
2018牛客多校6 - I Team Rocket KD树维护空间的更多相关文章
- 牛客多校第三次B——线段树维护线性基交
写线性基交函数时调试了半天.. #include<bits/stdc++.h> using namespace std; #define ll long long #define maxn ...
- 牛客多校第3场 J 思维+树状数组+二分
牛客多校第3场 J 思维+树状数组+二分 传送门:https://ac.nowcoder.com/acm/contest/883/J 题意: 给你q个询问,和一个队列容量f 询问有两种操作: 0.访问 ...
- 牛客多校3 A-PACM Team(状压降维+路径背包)
PACM Team 链接:https://www.nowcoder.com/acm/contest/141/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144 ...
- 2018牛客多校第六场 I.Team Rocket
题意: 给出n个区间和m个点(点按顺序给出且强制在线).每个区间只会被第一个他包含的点摧毁.问每个点能摧毁多少个区间以及每个区间是被哪个点摧毁的. 题解: 将n个区间按照左端点排序,然后用vector ...
- 2018牛客多校2 - J farm 随机乱搞/二进制分组
题意:给定n*m的格子,每个格子有不同的种类,q次操作,每次操作使[x1,y1]到[x2,y2]的格子除了k类型的以外都删除,最后单次询问所有格子被删了几个 官方题解提到了两种有意思的做法,随机和二进 ...
- 2018牛客多校1 - J Different Integers 莫队/主席树签到
题意:给出n<5e4,a[1...n],单次1e5总次1e6次查询除去区间(L,R)的数的个数 开场5分钟:莫队是不可能莫队的,这道题是不可能莫队的 最后1小时:真香 具体操作没啥特别的,注意一 ...
- 2018牛客多校第二场a题
一个人可以走一步或者跳x步,但不能连着跳,问到这个区间里有几种走法 考虑两种状态 对于这一点,我可以走过来,前面是怎么样的我不用管,也可以跳过来但是,跳过来必须保证前一步是走的 dp[i][0]表示 ...
- 2018牛客多校第六场 G.Pikachu
题意: 给出一棵n个点的树,每条边有边权.对这个树加边变成一个完全图.新加的边的权值为边上两点在树上的距离.求完全图上任意两点的最大流之和. 题解: 一共有C(n,2)个点对.假设当前求s到t之间的最 ...
- 2018牛客多校第五场 H.subseq
题意: 给出a数组的排列.求出字典序第k小的b数组的排列,满足1<=bi<=n,bi<bi+1,a[b[i]]<a[b[i+1]],m>0. 题解: 用树状数组倒着求出以 ...
随机推荐
- HUST软件测试数媒1501班: 第0周作业成绩
说明 本次公布的成绩包含三次作业的结果: 毕博平台课前测试题 第0周作业1:开设博客 第0周作业2:博客阅读和思考 如果同学对作业结果存在异议,可以: 在线平台的第一周在线答疑中创建话题申诉. 或直接 ...
- Smarty简介
Smarty是一个使用PHP写出来的模板引擎,是目前业界最著名的PHP模板引擎之一.它分离了逻辑代码和外在的内容,提供了一种易于管理和使用的方法,用来将原本与HTML代码混杂在一起PHP代码逻辑分离. ...
- Perl 学习笔记-模块
1.Perl模块介绍 2个来源, 一个是随Perl发行版本一同打包, 只要安装了Perl就可以使用; 另一种是需要从CPAN上下载,自己安装. 寻找模块之前, 先检查系统上是否已经安装过了, ...
- Swig在Mac OS X上的安装
网上有很多类似文章介绍Swig怎么在Mac OS X上安装和配置,一般来说就是: 下载pcre,configure & make & make install 下载swig,confi ...
- command >/dev/null 2>&1 解说
0:表示键盘输入(stdin)1:表示标准输出(stdout),系统默认是1 2:表示错误输出(stderr) command >/dev/null 2>&1 & == ...
- Html::a 生成 method=post
<?= Html::a(Yii::t('app', 'delete'), ['delete', 'id' => $model->id], [ 'class' => 'btn b ...
- Redis与Java的链接Jedis(二)
就像jdbc跟java链接数据库一样 redis跟java链接最好的工具就是Jedis 相关资源下载:https://github.com/xetorthio/jedis 正常建立java项目, 导入 ...
- 10.13DOM中document--文档1找到元素的方法,还有元素内容属性
今天讲了js的组成部分中的第二组成部分(DOM),DOM包括以下内容: window -- 窗口 ...
- APUE(4)---文件和目录 (3)
十三.函数rename和renameat #include <stdio.h> int rename(const char *oldname, const char *newname); ...
- HTML5+CSS3+jQuery Mobile轻松构造APP与移动网站 (陈婉凌) 中文pdf扫描版
<HTML5+CSS3+jQuery Mobile轻松构造APP与移动网站>以HTML与CSS为主,配合jQuery制作网页,并搭配jQueryMobile制作移动网页,通过具体的范例从基 ...