Gym101630A Archery Tournament
题目链接:https://vjudge.net/problem/Gym-101630A
题目大意:
有\(n\)个操作,每次输入\(t\) \(x\) \(y\)\((t=1,2; -10^9 \le x,y \le 10^9; y > 0)\). 当\(t=1\),在坐标平面上立一个圆心在\(x,y\),半径为\(y\)的圆形靶子。当\(t=2\),往点\(x,y\)射一箭,如果在这个点上有靶子,则输出这个靶子是在第几次操作中出现的,并把这个靶子销毁;如果这个点上没有靶子,则输出\("-1"\)。
知识点: 线段树、离散化
解题思路:
首先,肯定要离散化处理数据。然后用线段树套\(<set>\)(目的是方便删除操作)维护区间中有什么靶子。更新和删除的时候只要找到合适的区间就可以进行操作然后\(return\),不用\(push\) \(up\)或\(push\) \(down\),查询的时候则直到找到合适的靶子或者\(l==r\)为止。
AC代码:
#include <bits/stdc++.h> using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
typedef pair<int,int> P;
typedef long long ll;
const int maxn=2e5+; struct Input{
int t;
ll x,y;
}inp[maxn];
ll xs[maxn<<];
map<ll,int> ind;
set<int> tree[maxn<<];
void update(int L,int R,int c,int l,int r,int rt){
if(L<=l&&r<=R){
tree[rt].insert(c);
return;
}
int m=(l+r)>>;
if(L<=m) update(L,R,c,lson);
if(R>m) update(L,R,c,rson);
}
void era(int L,int R,int c,int l,int r,int rt){
if(L<=l&&r<=R){
tree[rt].erase(c);
return;
}
int m=(l+r)>>;
if(L<=m) era(L,R,c,lson);
if(R>m) era(L,R,c,rson);
}
int query(int pos,int _x,int _y,int l,int r,int rt){
if(l<=pos&&pos<=r){
set<int>::iterator it=tree[rt].begin();
for(;it!=tree[rt].end();it++){
int now=*it;
if((inp[now].x-_x)*(inp[now].x-_x)+(inp[now].y-_y)*(inp[now].y-_y)<inp[now].y*inp[now].y)
return now;
}
}
if(l==r) return -;
int m=(l+r)>>;
if(pos<=m) return query(pos,_x,_y,lson);
else return query(pos,_x,_y,rson);
}
int main(){
// freopen("in.txt","r",stdin);
int n,cnt=;
scanf("%d",&n);
for(int i=;i<=n;i++){
scanf("%d%lld%lld",&inp[i].t,&inp[i].x,&inp[i].y);
if(inp[i].t==)
xs[cnt++]=inp[i].x-inp[i].y,xs[cnt++]=inp[i].x+inp[i].y;
}
sort(xs,xs+cnt);
int m=unique(xs,xs+cnt)-xs;
for(int i=;i<m;i++){
ind[xs[i]]=i;
}
for(int i=;i<=n;i++){
if(inp[i].t==)
update(ind[inp[i].x-inp[i].y]+,ind[inp[i].x+inp[i].y],i,,m-,);
else{
int pos=-;
int l=,r=m-;
while(l<=r){
int mid=(l+r)>>;
if(xs[mid-]>inp[i].x) r=mid-;
else if(xs[mid]<inp[i].x) l=mid+;
else{
pos=mid;
break;
}
}
if(pos==-) printf("-1\n");
else{
int ret=query(pos,inp[i].x,inp[i].y,,m-,);
if(ret==-)
printf("-1\n");
else{
printf("%d\n",ret);
era(ind[inp[ret].x-inp[ret].y]+,ind[inp[ret].x+inp[ret].y],ret,,m-,);
}
}
}
}
return ;
}
Gym101630A Archery Tournament的更多相关文章
- 2017-2018 ACM-ICPC Northern Eurasia(A.Archery Tournament)
题目链接:https://vjudge.net/problem/Gym-101630A 题意: n个事件,t=1 代表增加一个圆心为(x,y),半径为 abs(y)的靶子,t=2,代表射击的坐标为(x ...
- A - Archery Tournament 动态开点+vecotor 神仙题
存图还是像矩形一样的存,每个节点存所在区级内部的圆的编号,然后暴力判断,开始我也有这个想法,但是...这TM也能过...仔细想想,貌似好像是可以过,时间复杂度玄学无法证明.... #include&l ...
- NEERC-2017
A. Archery Tournament 用线段树套set维护横坐标区间内的所有圆,查询时在$O(\log n)$个set中二分查找即可. 时间复杂度$O(n\log^2n)$. #include& ...
- 【做题】neerc2017的A、C、I、L
A - Archery Tournament 一开始往化简公式的方向去想,结果没什么用. 考虑与一条垂线相交的圆的个数.不难YY,当圆的个数最多时,大概就是这个样子的: 我们稍微推一下式子,然后就能发 ...
- 2017 NEERC
2017 NEERC Problem A. Archery Tournament 题目描述:在二维平面上,会陆续出现一些圆,以及一些询问,询问点是否在圆内,如果是,则输出那个圆,并把那个圆删掉,否则输 ...
- 2017-2018 ACM-ICPC Northern Eurasia (Northeastern European Regional) Contest (NEERC 17) 日常训练
A - Archery Tournament 题目大意:按时间顺序出现靶子和射击一个位置,靶子的圆心为(x, y)半径为r,即圆与x轴相切,靶子不会重叠,靶子被击中后消失, 每次射击找出哪个靶子被射中 ...
- Codeforces CF#628 Education 8 A. Tennis Tournament
A. Tennis Tournament time limit per test 1 second memory limit per test 256 megabytes input standard ...
- Rock-Paper-Scissors Tournament[HDU1148]
Rock-Paper-Scissors TournamentTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Ja ...
- CF 628A --- Tennis Tournament --- 水题
CF 628A 题目大意:给定n,b,p,其中n为进行比赛的人数,b为每场进行比赛的每一位运动员需要的水的数量, p为整个赛程提供给每位运动员的毛巾数量, 每次在剩余的n人数中,挑选2^k=m(m & ...
随机推荐
- var、let、const
var.let.const之间的区别和使用 1.var声明变量可以重复声明,而let不可以重复声明 let a = 1; let a = 2; var b = 3; var b = 4; a // I ...
- 27.rm命令
rm命令可以删除指定的文件或目录.也可以将某个目录及其下属的所有文件及其子目录均删除掉.对于链接文件,只是删除整个链接文件,而原有文件保持不变. 选项:-f:强制删除. -r:递归处理,将指定目录下的 ...
- L3.二.return
# 函数的返回值 def get_max(a,b,c): max_num=a if b > max_num: max_num = b if c > max_num: max_num = c ...
- cobbler的网页操作
需求:安装一台服务器 1.指定两块网卡一块外网一块内网2.内网ip10.0.0.62外网为172.16.1.623.主机名为m02 开始吧! 1.添加镜像文件 2.创建ks文件 编写ks文件 附:ks ...
- 面向对象第四单元(UML)总结
OO第四单元 一.总结本单元两次作业的架构设计 第一次作业 架构 第一次作业只有类图,所以全部的UmlElement都可以放在MyUmlInteraction中进行存储.计算和查找.对于类图来说,可以 ...
- 《C程序设计语言》 练习1-22
问题描述 练习1-22 编写一个程序,把较长的输入行“折”成短一些的两行或者多行,折行的位置在输入行的第N列之前的最后一个非空格之后.要保持程序能够智能地处理输入行很长以及在制定的列前没有空格或者制表 ...
- 1 ThinkPHP框架初识
一.PHP主流框架介绍 主流的框架有laravel.symfony.thinkphp MVC和三层结构 MVC可以说是一种开发模式,三层结构是一种开发习惯,严格来讲,他们两者是完全不同的概念,但是在实 ...
- Java笔记(day18-19)
泛型: jdk1.5出现的安全机制. 好处: 1,将运行时期的问题ClassCastException转到了编译时期. 2,避免了强制转换的麻烦. <>:当操作的引用数据类型不确定的时候. ...
- 支付宝小程序serverless---获取用户信息(头像)并保存到云数据库
支付宝小程序serverless---获取用户信息(头像)并保存到云数据库 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢! 我又 ...
- 数学建模(二)优劣解距离法Topsis模型部分
步骤: (一)统一指标类型:指标正向化(转化为极大型)(论文) 越大越好极大型指标,效益型指标 越小越好极小型指标,成本型指标 max-x,max=max{xi} 落在某个区间[a,b]是最好的,区间 ...