传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=4418

【题解】

被题目名称吓死系列。

用一棵线段树维护当前有哪些半径。

那么将扇形差分,每段空白区域相当于查询线段树内第K大。

权值线段树就行啦!

O(nlogn)

  1. # include <stdio.h>
  2. # include <string.h>
  3. # include <iostream>
  4. # include <algorithm>
  5. // # include <bits/stdc++.h>
  6.  
  7. using namespace std;
  8.  
  9. typedef long long ll;
  10. typedef long double ld;
  11. typedef unsigned long long ull;
  12. const int M = 5e5 + ;
  13. const int mod = 1e9+;
  14.  
  15. # define RG register
  16. # define ST static
  17.  
  18. int n, m, K;
  19.  
  20. struct pa {
  21. int r, pos;
  22. int f;
  23. pa() {}
  24. pa(int r, int pos, int f) : r(r), pos(pos), f(f) {}
  25. friend bool operator <(pa a, pa b) {
  26. return a.pos < b.pos;
  27. }
  28. }p[M]; int pn = ;
  29.  
  30. namespace SMT {
  31. int sz[M];
  32. # define ls (x<<)
  33. # define rs (x<<|)
  34. inline void edt(int x, int l, int r, int pos, int del) {
  35. if(l == r) {
  36. sz[x] += del;
  37. return ;
  38. }
  39. int mid = l+r>>;
  40. if(pos <= mid) edt(ls, l, mid, pos, del);
  41. else edt(rs, mid+, r, pos, del);
  42. sz[x] = sz[ls] + sz[rs];
  43. }
  44. inline int query(int x, int l, int r, int rk) {
  45. if(l == r) return l;
  46. int mid = l+r>>;
  47. if(sz[rs] < rk) return query(ls, l, mid, rk-sz[rs]);
  48. else return query(rs, mid+, r, rk);
  49. }
  50. inline int query(int rk) {
  51. if(sz[] < rk) return ;
  52. else return query(, , 1e5, rk);
  53. }
  54. }
  55.  
  56. int main() {
  57. cin >> n >> m >> K;
  58. for (int i=, r, a1, a2; i<=n; ++i) {
  59. scanf("%d%d%d", &r, &a1, &a2);
  60. p[++pn] = pa(r, a1, );
  61. p[++pn] = pa(r, a2, -);
  62. if(a1 > a2) {
  63. p[++pn] = pa(r, -m, );
  64. p[++pn] = pa(r, m, -);
  65. }
  66. }
  67. ll ans = ;
  68. int lst = -1e9;
  69. sort(p+, p+pn+);
  70. // for (int i=1; i<=pn; ++i) printf("pos = %d, r = %d, del = %d\n", p[i].pos, p[i].r, p[i].f);
  71. for (int i=; i<=pn; ++i) {
  72. int ps = p[i].pos, j=i;
  73. if(lst != -1e9) {
  74. int R = SMT::query(K);// cout << p[i].pos << ' ' << R << endl;
  75. ans += 1ll * R * R * (p[i].pos - lst);
  76. }
  77. while(j+ <= pn && p[j+].pos == p[i].pos) ++j;
  78. for (int k=i; k<=j; ++k)
  79. SMT::edt(, , 1e5, p[k].r, p[k].f);
  80. lst = p[i].pos;
  81. i = j;
  82. }
  83. cout << ans;
  84. return ;
  85. }

bzoj4418 [Shoi2013]扇形面积并的更多相关文章

  1. 【BZOJ4418】[Shoi2013]扇形面积并 扫描线+线段树

    [BZOJ4418][Shoi2013]扇形面积并 Description 给定N个同心的扇形,求有多少面积,被至少K个扇形所覆盖. Input 第一行是三个整数n,m,k.n代表同心扇形的个数,m用 ...

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

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

  3. SHOI2013 扇形面积并

    题目链接:戳我 补一张图 我们尝试把圆上的扇形转化成直线上的矩形--我们维护[1,2*m]的区间,那么每个能产生贡献的子区间的长度*第K大的半径的平方的总和就是answer了. 怎么转化呢?左端点为a ...

  4. SHOI 2013 【扇形面积并】

    早上考的,我打了80分的部分分,出来和同学讨论的时候真想扇自己一巴掌...... 题目描述: 给定 n 个同心的扇形,求有多少面积,被至少k 个扇形所覆盖. 输入输出格式 输入格式: 第一行是三个整数 ...

  5. OI题目类型总结整理

    ## 本蒟蒻的小整理qwq--持续更新(咕咕咕) 数据结构 数据结构 知识点梳理 数据结构--线段树 推荐yyb dalao的总结--戳我 以后维护线段树还是把l,r写到struct里面吧,也别写le ...

  6. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  7. bzoj4418&&bzoj4419&&bzoj4420:SHOI2013Day2题解

    这三题截止现在(2016.3.11)窝居然都是跑的最快的……可啪…… T1 bzoj4418 这题叫做扇形面积并,看到这个名字我就方了,因为我不会计算几何啊QAQ 一看题目,发现是傻逼题……(雾) 又 ...

  8. 求两圆相交部分面积(C++)

    已知两圆圆心坐标和半径,求相交部分面积: #include <iostream> using namespace std; #include<cmath> #include&l ...

  9. POJ 2986 A Triangle and a Circle 圆与三角形的公共面积

    计算几何模板 #include<stdio.h> #include<string.h> #include<stdlib.h> #include<math.h& ...

随机推荐

  1. python web框架的介绍

    随着互联网的兴起,web开发变得愈发的重要.Python作为当前火热的语言, 其中的web开发框架可以说是百花齐放,下面聊一聊这些框架. 一: 基于Python的代表性Web框架 Django Dja ...

  2. B1016 部分A+B (15分)

    B1016 部分A+B (15分) 输入格式: 输入在一行中依次给出 A.DA.B.DB,中间以空格分隔,其中 \(0<A,B<10^10\). 输出格式: 在一行中输出 PA+PB的值. ...

  3. ABAP CDS - SELECT, association

    ABAP CDS - SELECT, association Syntax ... ASSOCIATION [ [min..max] ] TO target [AS _assoc] ON cond_e ...

  4. PHP.35-TP框架商城应用实例-后台11-商品分类-删除分类(2种方法)、添加、修改

    删除分类 删除一个分类的同时,其所有子分类都删除 在控制器CategoryCtroller.class.php中添加删除函数(delete) 在分类模型中添加钩子函数_before_delete()[ ...

  5. luogu3317 [SDOI2014]重建

    原来矩阵树定理对于边是概率的情况也是适用的qwqwq. ref #include <iostream> #include <cstdio> #include <cmath ...

  6. Nuget 异常引用记录

    事件描述 Nuget未能将packages.config中的dll成功引入项目中 解决办法 从Nuget中删除对NewtonSoft.Json的引用并重新对NewtonSoft.Json 4.5.0. ...

  7. Python SimpleHTTPServer简单HTTP服务器

    搭建FTP,或者是搭建网络文件系统,这些方法都能够实现Linux的目录共享.但是FTP和网络文件系统的功能都过于强大,因此它们都有一些不够方便的地方.比如你想快速共享Linux系统的某个目录给整个项目 ...

  8. Java基础-4变量与数据类型

    变量:变量是Java程序中的一个基本存储单元.变量是一个标识符.类型及一个可选初始值的组合定义.所有的变量都有一个作用域,即变量在某一区域有效. 基本的变量声明方式如下: int a; float b ...

  9. Python全栈工程师

    ParisGabriel       Python 入门基础   print(“hello world”)变量 : 存储信息的,日后被调用.修改操作常量: 固定不变的量,字母大写命名规则:1. 字母数 ...

  10. c#中onclick事件请求的两种区别

    在C#中如果是asp控件的button有两个click的调用,一个是OnClick,一个是OnClientClick.那么这两者有什么区别呢,下面就来说说区别. <asp:Button ID=& ...