[vijos]1066弱弱的战壕<线段树>
题目链接:https://www.vijos.org/p/1066
这道题没什么难度,只是要一个排序然后就是线段树的基本套路模版了
但是我还是讲一讲思路吧:
给出的是坐标x,y,当一个点的x,y都小于等于另外一个点,则这个点就是另外一个点的保护对象,然后我们就可以对x进行一个排序,然后用线段树依次加入纵坐标去更新
保护的数量,这就是这个简单套路
这题不难,就直接上代码吧
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<queue>
#include<cstdlib>
#define maxn 15005
using namespace std; struct edge{
int l,r,sum;
}e[maxn*]; int n,maxy,ans[]; struct point{
int x,y;
}f[maxn*]; int comp(point a,point b)
{
return (a.x==b.x)?(a.y<b.y):(a.x<b.x);
} void build(int l,int r,int pos)
{
e[pos].sum=;e[pos].l=l;e[pos].r=r;
if(l!=r)
{
int mid=(l+r)/;
build(l,mid,pos*);
build(mid+,r,pos*+);
} } void change(int l,int r,int pos)
{//将那些纵坐标大于等于l的处理
if(e[pos].l==l&&e[pos].r==r)
{
e[pos].sum++;
return;
}
if(e[pos].l==e[pos].r)return;
int mid=(e[pos].l+e[pos].r)/;
if(mid>=r)
{
change(l,r,pos*);
}else{
if(mid<l)change(l,r,pos*+);
else{
change(l,mid,pos*);
change(mid+,r,pos*+);
}
} } int query(int po,int pos)
{
if(e[pos].l==e[pos].r)return e[pos].sum;
int mid=(e[pos].l+e[pos].r)/;
if(po<=mid){
return e[pos].sum+query(po,pos*);
}else return e[pos].sum+query(po,pos*+); } int main()
{ scanf("%d",&n);
for(int i=;i<=n-;i++)
{
int a,b;
scanf("%d%d",&a,&b);
f[i].x=a;f[i].y=b;
maxy=max(maxy,b);
}
sort(f,f+n,comp);//首先让x坐标排个序,接下来加点就只用在y坐标上进行处理
build(,,);
for(int i=;i<=n-;i++)
{
ans[query(f[i].y,)]++; //查看在哪一个答案区间
change(f[i].y,,);//i点加进来后,需要加1的点区间
}
for(int i=;i<n;i++)
{
printf("%d\n",ans[i]);
} }
[vijos]1066弱弱的战壕<线段树>的更多相关文章
- 【vijos】1750 建房子(线段树套线段树+前缀和)
https://vijos.org/p/1750 是不是我想复杂了.... 自己yy了个二维线段树,然后愉快的敲打. 但是wa了两法.......sad 原因是在处理第二维的更新出现了个小问题,sad ...
- 【vijos1066】弱弱的战壕 线段树
描述 永恒和mx正在玩一个即时战略游戏,名字嘛~~~~~~恕本人记性不好,忘了-_-b. mx在他的基地附近建立了n个战壕,每个战壕都是一个独立的作战单位,射程可以达到无限(“mx不赢定了?!?”永恒 ...
- BZOJ2333 [SCOI2011]棘手的操作 【离线 + 线段树】
题目 有N个节点,标号从1到N,这N个节点一开始相互不连通.第i个节点的初始权值为a[i],接下来有如下一些操作: U x y: 加一条边,连接第x个节点和第y个节点 A1 x v: 将第x个节点的权 ...
- 小结:线段树 & 主席树 & 树状数组
概要: 就是用来维护区间信息,然后各种秀智商游戏. 技巧及注意: 一定要注意标记的下放的顺序及影响!考虑是否有叠加或相互影响的可能! 和平衡树相同,在操作每一个节点时,必须保证祖先的tag已经完全下放 ...
- Vijos P1066 弱弱的战壕【多解,线段树,暴力,树状数组】
弱弱的战壕 描述 永恒和mx正在玩一个即时战略游戏,名字嘛~~~~~~恕本人记性不好,忘了-_-b. mx在他的基地附近建立了n个战壕,每个战壕都是一个独立的作战单位,射程可以达到无限(“mx不赢定了 ...
- 树状数组训练题1:弱弱的战壕(vijos1066)
题目链接:弱弱的战壕 这道题似乎是vijos上能找到的最简单的树状数组题了. 原来,我有一个错误的思想,我的设计是维护两个树状数组,一个是横坐标,一个是纵坐标,然后读入每个点的坐标,扔进对应的树状数组 ...
- [Vijos] 弱弱的战壕
描述 永恒和mx正在玩一个即时战略游戏,名字嘛~~~~~~恕本人记性不好,忘了-_-b. mx在他的基地附近建立了n个战壕,每个战壕都是一个独立的作战单位,射程可以达到无限(“mx不赢定了?!?”永恒 ...
- 【vijos】P1066 弱弱的战壕
[算法]线段树 [题解]将所有坐标按x(第一)和y(第二)从小到大排序,再按顺序插入线段树,即在线段树中将y坐标位置+1,这样就能保证每个坐标能包含的点一定先被处理了,每次询问查询1...a[i].y ...
- VIJOS-P1066 弱弱的战壕
JDOJ 1247: VIJOS-P1066 弱弱的战壕 题目传送门 Description 永恒和mx正在玩一个即时战略游戏,名字嘛~~~~~~恕本人记性不好,忘了--b. mx在他的基地附近建立了 ...
随机推荐
- node--fs
1.fs模块内置方法 1)stat 检测是文件还是目录 fs.stat(fileAddress,(err,stats)=>{ //err 出错信息 //stats.isFile() 该东西是文件 ...
- HTML中的meta标签常用属性及其作用总结
文章同步到github 以前没怎么太注意过meta标签的作用,只是简单了解一些常用属性,现在结合个人了解的进行记录与总结: 元数据 首先需要了解一下元数据(metadata)元素的概念,用来构建HTM ...
- p2.js 与 createjs 的组合应用
开始前简单说下其他几款js物理引擎 box2d老牌,功能全面,但是效率低下,移动端基不用考虑的 matterjs 效率目前我测试下来最高,但是依然还在开发中(好像还很缓慢),目前功能局限,而且有bu ...
- 第八次——非确定的自动机NFA确定化为DFA
NFA 确定化为 DFA 子集法: f(q,a)={q1,q2,…,qn},状态集的子集 将{q1,q2,…,qn}看做一个状态A,去记录NFA读入输入符号之后可能达到的所有状态的集合. 步骤: 1. ...
- sonarqube配置全指南,集成阿里巴巴p3c规范
环境准备 内置数据库 Sonar安装成功后,默认内置H2数据库,用于记录单次的扫描结果,对同一个project重复扫码,会覆盖之前的扫描记录,所以H2 数据库只应用于测试,不可以用于生产环境,那如果你 ...
- PHP eval变量延迟赋值
$str = 'and {$prev}name like \'%五子棋%\'';$prev = "table.";eval("\$str = \"$str\&q ...
- golang的sync.WaitGroup使用示例
下面一段代码 len(m) 不一定会打印为 10,为什么?.如果想要 len(m) 打印为 10,应该怎么修改代码? func main() { const N = 10 m := make(map[ ...
- 解决 微信包含emoji表情的昵称,直接用sql语句可以写入而在yii2框架写却写不成功的 问题
背景: 首先是emoji表情写入不成功,在网上查了许多资料,包括配置mysql,重启mysql等等,这样之后发现还是写入失败. 将sql语句复制出来,直接粘贴到mysql客户端执行,发现没问题.而通过 ...
- php7连接mysql8
最近因为剁手买了mac所以在mac上搭建lnmp环境. 刚好看到mysql从5.7跳到8,性能据说快上一倍,果断尝鲜! lnmp基本都弄好了,但是到用php连接Mysql这一步出了岔子. 出错原因: ...
- json 的基础入门
JSON是什么: JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.在初始的项目开发中人们更倾向于使用xml来进行数据的传输,但当JSON出现后,开发者更倾 ...