【BZOJ4418】[Shoi2013]扇形面积并

Description

给定N个同心的扇形,求有多少面积,被至少K个扇形所覆盖。

Input

第一行是三个整数n,m,k。n代表同心扇形的个数,m用来等分 [-π,π]的弧度。
从第二行开始的n行,每行三个整数r,a1,a2。描述了一个圆心在原点的扇形,半径为r,圆心角是从弧度πa1/m到πa2/m,a1可能大于a2,逆时针扫过的区域为该扇形面积。

Output

输出一个整数ans,至少被K个扇形所覆盖的总面积等于π/2m×ans
保证答案不超过2^63-1

Sample Input

【输入样例1】
3 8 2
1 -8 8
3 -7 3
5 -5 5
【输入样例2】
2 4 1
4 4 2
1 -4 4

Sample Output

【输出样例1】
76
【输出样例2】
98

HINT

对于100%的数据,1≤n≤10^5,   1≤m≤10^6,1≤k≤5000,1≤ri≤10^5,-m≤a1,a2≤m

题解:现将扇形掰开变成矩形,然后用扫描线处理,每个矩形都改成差分的形式。由于对于任意一条与x轴垂直的先,里面的点被覆盖的层数一定不会比外面少,所以我们可以在线段树上二分,时间复杂度$O(nlogr)$。

  1. #include <cstdio>
  2. #include <cstring>
  3. #include <iostream>
  4. #include <algorithm>
  5. #define lson x<<1
  6. #define rson x<<1|1
  7. using namespace std;
  8.  
  9. const int maxn=100010;
  10. typedef long long ll;
  11. int n,m,tot,R,K;
  12. int s[maxn<<2];
  13. ll ans;
  14. struct node
  15. {
  16. int x,y,k;
  17. node() {}
  18. node(int a,int b,int c) {x=a,y=b,k=c;}
  19. }p[maxn<<2];
  20. bool cmp(const node &a,const node &b)
  21. {
  22. return a.x<b.x;
  23. }
  24. inline void pushup(int x)
  25. {
  26. s[x]=s[lson]+s[rson];
  27. }
  28. void updata(int l,int r,int x,int a,int b)
  29. {
  30. s[x]+=b;
  31. if(l==r) return ;
  32. int mid=(l+r)>>1;
  33. if(a<=mid) updata(l,mid,lson,a,b);
  34. else updata(mid+1,r,rson,a,b);
  35. }
  36. int query(int l,int r,int x,int a)
  37. {
  38. if(l==r) return l;
  39. int mid=(l+r)>>1;
  40. if(s[rson]>=a) return query(mid+1,r,rson,a);
  41. return query(l,mid,lson,a-s[rson]);
  42. }
  43. inline int rd()
  44. {
  45. int ret=0,f=1; char gc=getchar();
  46. while(gc<'0'||gc>'9') {if(gc=='-') f=-f; gc=getchar();}
  47. while(gc>='0'&&gc<='9') ret=ret*10+(gc^'0'),gc=getchar();
  48. return ret*f;
  49. }
  50. int main()
  51. {
  52. n=rd(),m=rd(),K=rd();
  53. int i,a,b,c;
  54. for(i=1;i<=n;i++)
  55. {
  56. c=rd(),a=rd()+m,b=rd()+m,R=max(R,c);
  57. if(a<=b) p[++tot]=node(a,c,1),p[++tot]=node(b,c,-1);
  58. else p[++tot]=node(a,c,1),p[++tot]=node(2*m,c,-1),p[++tot]=node(0,c,1),p[++tot]=node(b,c,-1);
  59. }
  60. sort(p+1,p+tot+1,cmp);
  61. for(i=1;i<=tot;i++)
  62. {
  63. a=query(0,R,1,K),ans+=(ll)a*a*(p[i].x-p[i-1].x);
  64. updata(0,R,1,p[i].y,p[i].k);
  65. }
  66. printf("%lld",ans);
  67. return 0;
  68. }

【BZOJ4418】[Shoi2013]扇形面积并 扫描线+线段树的更多相关文章

  1. POJ1151Atlantis 矩形面积并 扫描线 线段树

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - POJ1151 题意概括 给出n个矩形,求他们的面积并. n<=100 题解 数据范围极小. 我们分3种 ...

  2. bzoj4418 [Shoi2013]扇形面积并

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=4418 [题解] 被题目名称吓死系列. 用一棵线段树维护当前有哪些半径. 那么将扇形差分,每段 ...

  3. 矩形面积并-扫描线 线段树 离散化 模板-poj1151 hdu1542

    今天刚看到这个模板我是懵逼的,这个线段树既没有建树,也没有查询,只有一个update,而且区间成段更新也没有lazy标记....研究了一下午,我突然我发现我以前根本不懂扫描线,之所以没有lazy标记, ...

  4. 4418: [Shoi2013]扇形面积并|二分答案|树状数组

    为何感觉SHOI的题好水. ..又是一道SB题 从左到右枚举每个区间,遇到一个扇形的左区间就+1.遇到右区间就-1,然后再树状数组上2分答案,还是不会码log的.. SHOI2013似乎另一道题发牌也 ...

  5. HDU 1255 覆盖的面积 (扫描线 线段树 离散化 矩形面积并)

    题目链接 题意:中文题意. 分析:纯手敲,与上一道题目很相似,但是刚开始我以为只是把cnt>=0改成cnt>=2就行了,. 但是后来发现当当前加入的线段的范围之前 还有线段的时候就不行了, ...

  6. POJ 1151 Atlantis 矩形面积求交/线段树扫描线

    Atlantis 题目连接 http://poj.org/problem?id=1151 Description here are several ancient Greek texts that c ...

  7. hdu1542 Atlantis(扫描线+线段树+离散)矩形相交面积

    题目链接:点击打开链接 题目描写叙述:给定一些矩形,求这些矩形的总面积.假设有重叠.仅仅算一次 解题思路:扫描线+线段树+离散(代码从上往下扫描) 代码: #include<cstdio> ...

  8. HDU 3642 - Get The Treasury - [加强版扫描线+线段树]

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3642 Time Limit: 10000/5000 MS (Java/Others) Memory L ...

  9. HDU 3265/POJ 3832 Posters(扫描线+线段树)(2009 Asia Ningbo Regional)

    Description Ted has a new house with a huge window. In this big summer, Ted decides to decorate the ...

随机推荐

  1. DBA不可不知的操作系统内核参数

    背景 操作系统为了适应更多的硬件环境,许多初始的设置值,宽容度都很高. 如果不经调整,这些值可能无法适应HPC,或者硬件稍好些的环境. 无法发挥更好的硬件性能,甚至可能影响某些应用软件的使用,特别是数 ...

  2. Android代码内存优化建议-Android官方篇

    转自:http://androidperformance.com/ http://developer.android.com/intl/zh-cn/training/displaying-bitmap ...

  3. 消息中间件系列之ActiveMQ的简单安装

    本次测试使用一台ip为192.168.2.12的虚拟机 一.解压压缩包 tar -zxvf apache-activemq-5.14.4-bin.tar.gz 二.启动activemq 进入到bin目 ...

  4. 3D MAX 人物骨骼建设

      3DMax方面所涉及的专业知识:                       (1)一下的关于3DMax中对于人物的设计和操作均需要在对3DMax基础知识熟练掌握的情况下进行的. (2)骨骼架设: ...

  5. js 延时

    alert(1);setTimeout(function(){alert(2);}, 1000);setTimeout(function(){alert(3);}, 2000);

  6. 关于Cocos2d-x中掉帧导致游戏一卡一卡的网上一些的解决方法

    方法1 掉帧主要是setpostion引起的  因为每一帧每一个精灵都要set一次虽然不知道为什么会这样但是if(poX<1000&&pox>-100){     xx-& ...

  7. TensorFlow基础笔记(15) 编译TensorFlow.so,提供给C++平台调用

    参考 http://blog.csdn.net/rockingdingo/article/details/75452711 https://www.cnblogs.com/hrlnw/p/700764 ...

  8. JavaScript 中,num = num || 1 这种写法有哪些优缺点?

    语法糖,等价于 if(!!num === false) num=1; 类似于java的 num=null ? 1 : num 以下是来自某位知友的解答: 就是个简写法而已.好处就是短一点,但是其实坏处 ...

  9. 美化VC界面(用户登录界面)

    源代码:下载 VC开发程序单调的界面相信大家都是深有感触,提到界面美化编程,人们都会说做界面不要用VC写,太难了.一句俗语:难者不会,会者不难.VC的美化界面编程并没有人们想像的那么难.这篇文章是我写 ...

  10. 网站性能测试PV到TPS的转换以及TPS的波动和淘宝性能测试要点

    <淘宝性能测试白皮书V0.3> 性能测试的难点不在于测,在于测出的数据和实际的对照关系,以及测试出来的数据对性能的评估(到底是好,还是不好). 淘宝性能测试白皮书,解决了我的4个问题:1. ...