UVA 12647 Balloon
这是一个线段树的题目;
我记得一个月前在cf上也做过一个类似的题目;
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 100010
#define bon 1000010
using namespace std;
int cover[bon<<];
int f[maxn<<],ans[maxn<<];
struct line
{
int x1,y1,x2,y2;
bool operator<(const line &t)const
{
return y1<t.y1;
}
} li[maxn<<]; void pushdown(int rt)
{
if(cover[rt]>=)
{
cover[rt<<]=cover[rt<<|]=cover[rt];
cover[rt]=-;
}
} int query(int x,int l,int r,int rt)
{
if(cover[rt]>=) return cover[rt];
int mid=(l+r)>>;
pushdown(rt);
if(x<=mid)return query(x,l,mid,rt<<);
else return query(x,mid+,r,rt<<|);
} void update(int L,int R,int i,int l,int r,int rt)
{
if(L<=l&&R>=r)
{
cover[rt]=i;
return;
}
int mid=(l+r)>>;
pushdown(rt);
if(L<=mid)update(L,R,i,l,mid,rt<<);
if(R>mid)update(L,R,i,mid+,r,rt<<|);
}
int n,q,xx;
void solve(int x)
{
int k=query(x,,bon,);
if(li[k].y1!=li[k].y2)x=ans[k];
if(f[k]==n)printf("%d\n",x);
else printf("%d %d\n",x,li[f[k]].y1);
} int main()
{
while(scanf("%d%d",&n,&q)!=EOF)
{
memset(cover,-,sizeof cover);
for(int i=; i<n; i++)
{
scanf("%d%d%d%d",&li[i].x1,&li[i].y1,&li[i].x2,&li[i].y2);
if(li[i].y1<li[i].y2)
{
swap(li[i].x1,li[i].x2);
swap(li[i].y1,li[i].y2);
}
}
li[n].x1=,li[n].x2=bon,li[n].y1=bon+,li[n].y2=bon+;
sort(li,li+n+);
for(int i=n; i>=; i--)
{
if(li[i].y1==li[i].y2) f[i]=i;
else
{
int k=query(li[i].x1,,bon,);
f[i]=f[k];
if(li[k].y1==li[k].y2) ans[i]=li[i].x1;
else ans[i]=ans[k];
}
int l=li[i].x1,r=li[i].x2;
if(l>r)swap(l,r);
update(l,r,i,,bon,);
}
while(q--)
{
scanf("%d",&xx);
solve(xx);
}
}
return ;
}
UVA 12647 Balloon的更多相关文章
- uva 1354 Mobile Computing ——yhx
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABGcAAANuCAYAAAC7f2QuAAAgAElEQVR4nOy9XUhjWbo3vu72RRgkF5
- UVA 10564 Paths through the Hourglass[DP 打印]
UVA - 10564 Paths through the Hourglass 题意: 要求从第一层走到最下面一层,只能往左下或右下走 问有多少条路径之和刚好等于S? 如果有的话,输出字典序最小的路径 ...
- UVA 11404 Palindromic Subsequence[DP LCS 打印]
UVA - 11404 Palindromic Subsequence 题意:一个字符串,删去0个或多个字符,输出字典序最小且最长的回文字符串 不要求路径区间DP都可以做 然而要字典序最小 倒过来求L ...
- UVA&&POJ离散概率与数学期望入门练习[4]
POJ3869 Headshot 题意:给出左轮手枪的子弹序列,打了一枪没子弹,要使下一枪也没子弹概率最大应该rotate还是shoot 条件概率,|00|/(|00|+|01|)和|0|/n谁大的问 ...
- UVA计数方法练习[3]
UVA - 11538 Chess Queen 题意:n*m放置两个互相攻击的后的方案数 分开讨论行 列 两条对角线 一个求和式 可以化简后计算 // // main.cpp // uva11538 ...
- UVA数学入门训练Round1[6]
UVA - 11388 GCD LCM 题意:输入g和l,找到a和b,gcd(a,b)=g,lacm(a,b)=l,a<b且a最小 g不能整除l时无解,否则一定g,l最小 #include &l ...
- UVA - 1625 Color Length[序列DP 代价计算技巧]
UVA - 1625 Color Length 白书 很明显f[i][j]表示第一个取到i第二个取到j的代价 问题在于代价的计算,并不知道每种颜色的开始和结束 和模拟赛那道环形DP很想,计算这 ...
- UVA - 10375 Choose and divide[唯一分解定理]
UVA - 10375 Choose and divide Choose and divide Time Limit: 1000MS Memory Limit: 65536K Total Subm ...
- UVA - 11584 Partitioning by Palindromes[序列DP]
UVA - 11584 Partitioning by Palindromes We say a sequence of char- acters is a palindrome if it is t ...
随机推荐
- [ImportNew]Java中的并发处理
本文来源:http://www.importnew.com/14506.html 这篇文章讨论了Java应用中并行处理的多种方法.从自己管理Java线程,到各种更好几的解决方法,Executor服务. ...
- matlab中disp函数的使用
disp函数直接将内容输出在Matlab命令窗口中, 关键是看disp函数怎么把字符和数字在一起进行显示. matlab中disp()就是屏幕输出函数,类似于c语言中的printf()函数 %%以下是 ...
- HashMap、HashSet源代码分析其 Hash 存储机制
集合和引用 就像引用类型的数组一样,当我们把 Java 对象放入数组之时,并不是真正的把 Java 对象放入数组中,只是把对象的引用放入数组中,每个数组元素都是一个引用变量. 实际上,HashSet ...
- 【linux操作命令】crontab
带续写... 版权声明:本文为博主原创文章,未经博主允许不得转载.
- 【linux操作命令】vim
高级一些的编辑器,都会包含宏功能,vim当然不能缺少了,在vim中使用宏是非常方便的: :qx 开始记录宏,并将结果存入寄存器x q 退出记录模式 @x 播放记录在x寄存器中的 ...
- 【C#4.0图解教程】笔记(第19章~第25章)
第19章 泛型 1.泛型概念 泛型提供了一种更准确地使用有一种以上的类型的代码的方式. 泛型允许我们声明类型参数化的代码,我们可以用不同的类型进行实例化. 泛型不是类型,而是类型的模板. 2.声明 ...
- linux时间自动同步
1,修正本地时区及ntp服务 #yum -y install ntp#rm -rf /etc/localtime#ln -s /usr/share/zoneinfo/Asia/Shanghai /et ...
- linux下挂载iso镜像的方法
新建目录/mnt/cdrom 执行命令 mount /dev/cdrom /mnt/cdrom [root@ocdp1 cdrom]# mount /dev/cdrom /mnt/cdrom moun ...
- 基于node/mongo的App Docker化测试环境搭建
搭建步骤: 1.宿主机环境 ubuntu 14.4宿主机环境(云主机): 安装wget与curl(sudo apt-get install wget curl)2.安装Docker (wget -q ...
- Oracle存储过程学习使用
存储过程创建语法: create or replace procedure 存储过程名(param1 in type,param2 out type) as 变量1 类型(值范围); 变量2 类型(值 ...