A - Archery Tournament 动态开点+vecotor 神仙题
存图还是像矩形一样的存,每个节点存所在区级内部的圆的编号,然后暴力判断,开始我也有这个想法,但是。。。这TM也能过。。。仔细想想,貌似好像是可以过,时间复杂度玄学无法证明。。。。
#include<iostream>
#include<string.h>
#include<algorithm>
#include<stdio.h>
#include<set>
#include<vector>
#define LL long long
using namespace std;
const int maxx = 2e5+;
vector<int>v[maxx*];
int xx[maxx];
int yy[maxx];
struct node
{
int l,r;
} tree[maxx*];
int cnt;
int ans;
bool check(int x1,int y1,int x2,int y2)
{
return 1LL*(x1-x2)*(x1-x2)+1LL*(y1-y2)*(y1-y2)<1LL*y1*y1;
}
void buildtree(int &rt,int l,int r,int L,int R,int id)
{
if (!rt)
{
cnt++;
rt=cnt;
}
if (L<=l && r<=R)
{
v[rt].push_back(id);
return ;
}
int mid=(l+r)>>;
if (L<=mid)
{
buildtree(tree[rt].l,l,mid,L,R,id);
}
if (R>mid)
{
buildtree(tree[rt].r,mid+,r,L,R,id);
}
}
void query(int rt,int l,int r,int x,int y)
{
if (!rt)return;
for (auto it:v[rt])
{
if(check(xx[it],yy[it],x,y))
{
ans=it;
return ;
}
}
if (l==r)
{
return ;
}
int mid=(l+r)>>;
if (x<=mid)
{
query(tree[rt].l,l,mid,x,y);
}
else
{
query(tree[rt].r,mid+,r,x,y);
}
}
void update(int rt,int l,int r,int ul,int ur,int id)
{
if (ul>ur)return;
if (ul<=l && r<=ur)
{
vector<int>tmp;
for (auto it:v[rt])
{
if (it!=id)
{
tmp.push_back(it);
}
}
v[rt]=tmp;
return ;
}
int mid=(l+r)>>;
if (ul<=mid)
{
update(tree[rt].l,l,mid,ul,ur,id);
}
if (ur>mid)
{
update(tree[rt].r,mid+,r,ul,ur,id);
}
}
int main()
{
int t,op;
int rt;
while(~scanf("%d",&t))
{
cnt=;
rt=;
for (int i=; i<=t; i++)
{
scanf("%d%d%d",&op,&xx[i],&yy[i]);
if (op==)
{
buildtree(rt,-1e9,1e9,xx[i]-yy[i],xx[i]+yy[i],i);
}
else
{
ans=-;
query(rt,-1e9,1e9,xx[i],yy[i]);
printf("%d\n",ans);
if (ans!=-)
{
update(rt,-1e9,1e9,xx[ans]-yy[ans],xx[ans]+yy[ans],ans);
}
}
}
}
return ;
}
A - Archery Tournament 动态开点+vecotor 神仙题的更多相关文章
- [ZJOI2019]语言(树链剖分+动态开点线段树+启发式合并)
首先,对于从每个点出发的路径,答案一定是过这个点的路径所覆盖的点数.然后可以做树上差分,对每个点记录路径产生总贡献,然后做一个树剖维护,对每个点维护一个动态开点线段树.最后再从根节点开始做一遍dfs, ...
- 【模板】【P3605】【USACO17JAN】Promotion Counting 晋升者计数——动态开点和线段树合并(树状数组/主席树)
(题面来自Luogu) 题目描述 奶牛们又一次试图创建一家创业公司,还是没有从过去的经验中吸取教训--牛是可怕的管理者! 为了方便,把奶牛从 1⋯N(1≤N≤100,000) 编号,把公司组织成一棵树 ...
- [2016湖南长沙培训Day4][前鬼后鬼的守护 chen] (动态开点线段树+中位数 or 动规 or 贪心+堆优化)
题目大意 给定一个长度为n的正整数序列,令修改一个数的代价为修改前后两个数的绝对值之差,求用最小代价将序列转换为不减序列. 其中,n满足小于500000,序列中的正整数小于10^9 题解(引自mzx神 ...
- [bzoj 3531][SDOI2014]旅行(树链剖分+动态开点线段树)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=3531 分析: 对于每个颜色(颜色<=10^5)都建立一颗线段树 什么!那么不是M ...
- 【BZOJ-4636】蒟蒻的数列 动态开点线段树 ||(离散化) + 标记永久化
4636: 蒟蒻的数列 Time Limit: 30 Sec Memory Limit: 256 MBSubmit: 247 Solved: 113[Submit][Status][Discuss ...
- CF731C Socks并查集(森林),连边,贪心,森林遍历方式,动态开点释放内存
http://codeforces.com/problemset/problem/731/C 这个题的题意是..小明的妈妈给小明留下了n只袜子,给你一个大小为n的颜色序列c 代表第i只袜子的颜色,小明 ...
- 【BZOJ3531】[Sdoi2014]旅行 树链剖分+动态开点线段树
[BZOJ3531][Sdoi2014]旅行 Description S国有N个城市,编号从1到N.城市间用N-1条双向道路连接,满足从一个城市出发可以到达其它所有城市.每个城市信仰不同的宗教,如飞天 ...
- BZOJ_4636_蒟蒻的数列_线段树+动态开点
BZOJ_4636_蒟蒻的数列_线段树+动态开点 Description 蒟蒻DCrusher不仅喜欢玩扑克,还喜欢研究数列 题目描述 DCrusher有一个数列,初始值均为0,他进行N次操作,每次将 ...
- codeforces 893F - Physical Education Lessons 动态开点线段树合并
https://codeforces.com/contest/893/problem/F 题意: 给一个有根树, 多次查询,每次查询对于$x$i点的子树中,距离$x$小于等于$k$的所有点中权值最小的 ...
随机推荐
- vim 查找及替换
#全文(%)查找(s)行首2个空格开头(/^ ), 替换(g)为无即删掉(//) :%s/^ //g #全文查找每行尾的2个空格,删除 :%s/ $//g
- Linux 下用Win共享
让win能访问到 linux 的smb 共享: linux 安装 samba: apt-get install samba #然后 vim /etc/samba/smb.conf #找到securit ...
- 使用Jedis操作Redis-使用Java语言在客户端操作---对key的操作
//添加String类型的模拟数据. jedis.set("mykey", "2"); jedis.set("mykey2", " ...
- re模块元字符
#元字符在re模块中有特殊意义的字符,有:^ $. * + {} [] () | \ ^$ #表示开头结尾,注意:[^]表示取反 . #点,表示任意一个字符,包括空格(一个空白字符),\t(换行符). ...
- js 正则去除html代码
function delHtmlTag(str){ return str.replace(/<[^>]+>/g,"");//去掉所有的html标记 }
- SpringMVC返回json的问题
在使用springmvc的时候,如果返回值是String, 返回一个json的字符串,在js里面接收会有问题,不能直接当成json使用,要通过eval来转成json. 就像你在js里面直接定义 var ...
- 如何让div处于body居中的状态
<!DOCTYPE html> <html lang="en" > <head> <meta charset="UTF-8&qu ...
- web前端学习(二)html学习笔记部分(8)--服务器推送事件3
1.2.22 html5服务器推送事件 1.2.22.1 html5服务器推送事件介绍 服务器推送事件(Server-sent Events)是HTML5规范中的一个组成部分,可以用来从服务器端实 ...
- selenium 常见问题之 nknown error: call function result missing ‘value’
运行时候出现错误提示如下: 出现该问题原因:chrome浏览器自动升级.导致和chromedriver支持的版本不匹配. 解决方案有两种(本人采用的是第一种方式解决办法.): 1.下载和当前使用的ch ...
- NYoj 155最短路
//dij #include<stdio.h> #include<string.h> #include<queue> using namespace std; #d ...