这是一个线段树的题目;

我记得一个月前在cf上也做过一个类似的题目;

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<algorithm>
  4. #define maxn 100010
  5. #define bon 1000010
  6. using namespace std;
  7. int cover[bon<<];
  8. int f[maxn<<],ans[maxn<<];
  9. struct line
  10. {
  11. int x1,y1,x2,y2;
  12. bool operator<(const line &t)const
  13. {
  14. return y1<t.y1;
  15. }
  16. } li[maxn<<];
  17.  
  18. void pushdown(int rt)
  19. {
  20. if(cover[rt]>=)
  21. {
  22. cover[rt<<]=cover[rt<<|]=cover[rt];
  23. cover[rt]=-;
  24. }
  25. }
  26.  
  27. int query(int x,int l,int r,int rt)
  28. {
  29. if(cover[rt]>=) return cover[rt];
  30. int mid=(l+r)>>;
  31. pushdown(rt);
  32. if(x<=mid)return query(x,l,mid,rt<<);
  33. else return query(x,mid+,r,rt<<|);
  34. }
  35.  
  36. void update(int L,int R,int i,int l,int r,int rt)
  37. {
  38. if(L<=l&&R>=r)
  39. {
  40. cover[rt]=i;
  41. return;
  42. }
  43. int mid=(l+r)>>;
  44. pushdown(rt);
  45. if(L<=mid)update(L,R,i,l,mid,rt<<);
  46. if(R>mid)update(L,R,i,mid+,r,rt<<|);
  47. }
  48. int n,q,xx;
  49. void solve(int x)
  50. {
  51. int k=query(x,,bon,);
  52. if(li[k].y1!=li[k].y2)x=ans[k];
  53. if(f[k]==n)printf("%d\n",x);
  54. else printf("%d %d\n",x,li[f[k]].y1);
  55. }
  56.  
  57. int main()
  58. {
  59. while(scanf("%d%d",&n,&q)!=EOF)
  60. {
  61. memset(cover,-,sizeof cover);
  62. for(int i=; i<n; i++)
  63. {
  64. scanf("%d%d%d%d",&li[i].x1,&li[i].y1,&li[i].x2,&li[i].y2);
  65. if(li[i].y1<li[i].y2)
  66. {
  67. swap(li[i].x1,li[i].x2);
  68. swap(li[i].y1,li[i].y2);
  69. }
  70. }
  71. li[n].x1=,li[n].x2=bon,li[n].y1=bon+,li[n].y2=bon+;
  72. sort(li,li+n+);
  73. for(int i=n; i>=; i--)
  74. {
  75. if(li[i].y1==li[i].y2) f[i]=i;
  76. else
  77. {
  78. int k=query(li[i].x1,,bon,);
  79. f[i]=f[k];
  80. if(li[k].y1==li[k].y2) ans[i]=li[i].x1;
  81. else ans[i]=ans[k];
  82. }
  83. int l=li[i].x1,r=li[i].x2;
  84. if(l>r)swap(l,r);
  85. update(l,r,i,,bon,);
  86. }
  87. while(q--)
  88. {
  89. scanf("%d",&xx);
  90. solve(xx);
  91. }
  92. }
  93. return ;
  94. }

UVA 12647 Balloon的更多相关文章

  1. uva 1354 Mobile Computing ——yhx

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABGcAAANuCAYAAAC7f2QuAAAgAElEQVR4nOy9XUhjWbo3vu72RRgkF5

  2. UVA 10564 Paths through the Hourglass[DP 打印]

    UVA - 10564 Paths through the Hourglass 题意: 要求从第一层走到最下面一层,只能往左下或右下走 问有多少条路径之和刚好等于S? 如果有的话,输出字典序最小的路径 ...

  3. UVA 11404 Palindromic Subsequence[DP LCS 打印]

    UVA - 11404 Palindromic Subsequence 题意:一个字符串,删去0个或多个字符,输出字典序最小且最长的回文字符串 不要求路径区间DP都可以做 然而要字典序最小 倒过来求L ...

  4. UVA&&POJ离散概率与数学期望入门练习[4]

    POJ3869 Headshot 题意:给出左轮手枪的子弹序列,打了一枪没子弹,要使下一枪也没子弹概率最大应该rotate还是shoot 条件概率,|00|/(|00|+|01|)和|0|/n谁大的问 ...

  5. UVA计数方法练习[3]

    UVA - 11538 Chess Queen 题意:n*m放置两个互相攻击的后的方案数 分开讨论行 列 两条对角线 一个求和式 可以化简后计算 // // main.cpp // uva11538 ...

  6. 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 ...

  7. UVA - 1625 Color Length[序列DP 代价计算技巧]

    UVA - 1625 Color Length   白书 很明显f[i][j]表示第一个取到i第二个取到j的代价 问题在于代价的计算,并不知道每种颜色的开始和结束   和模拟赛那道环形DP很想,计算这 ...

  8. UVA - 10375 Choose and divide[唯一分解定理]

    UVA - 10375 Choose and divide Choose and divide Time Limit: 1000MS   Memory Limit: 65536K Total Subm ...

  9. 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 ...

随机推荐

  1. C#根据WSDL文件生成WebService服务端代码

    转自:http://www.cnblogs.com/liyi93/archive/2012/01/30/2332320.html 虽然现在已经进入了.NET FrameWork 4.0的时代,WebS ...

  2. 【C语言】01-函数

    一.函数的分类 前面已经说过,C语言中的函数就是面向对象中的"方法",C语言的函数可以大概分为3类: 1.主函数,也就是main函数.每个程序中只能有一个.也必须有一个主函数.无论 ...

  3. 用ASP取出HTML里面的图片地址的函数

    用ASP取出HTML里面的图片地址的函数主要原理就是用正则判断的属性.这在采集程序中将非常有用. 函数如下: 以下是引用片段: Function ShowPic(str) Set objRegExp ...

  4. 项目开发中常用到的SQL语句

    阅读目录 循环示例 循环示例 循环示例 循环示例 1.循环示例 在前端面试中最常见的问题就是页面优化和缓存(貌似也是页面优化),被问了几次后心虚的不行,平然平时多少会用到一些,但突然问我,很难把自己知 ...

  5. sql server 查询字符串指定字符出现的次数

    这里提取指定符串"A"在字段中的出现次数SQL为: select len(keyword)-len(replace(keyword, 'A', ' ')) from 表 原理:用r ...

  6. ###Linux基础 - 2

    点击查看Evernote原文. #@author: gr #@date: 2014-10-13 #@email: forgerui@gmail.com 一.Linux基础命令2 mount: 挂载U盘 ...

  7. percent-encode 百分号编码

    原文地址:http://www.imkevinyang.com/2009/08/详解javascript中的url编解码.html 摘要 URI(统一资源标识)编解码 为什么需要编码 哪些需要编码 如 ...

  8. Xcode中,调试console窗口输出error: Couldn't materialize struct: the variable 'cell' has no location, it may have been optimized out的问题

    Xcode中调试代码时,常常需要使用console窗口查看变量的信息,比如使用了如下的命令来输出有关UITableView中一个UITableViewCell的信息, po cell 令人感到意外的是 ...

  9. asp:时间的显示

    DateTime dt = DateTime.Now;//    Label1.Text = dt.ToString();//2005-11-5 13:21:25//    Label2.Text = ...

  10. Vue.js中Directive知识

    近期所学的Vue.js这个MVVM前端技术缓解了我一直愁于前后端开发杂糅所带来的痛苦.今天就来说说关于Vue.js里面的Directive知识. Directive Directive看上去虽然和An ...