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


题解Here!
很容易想到把每个扇形转换成矩形,然后就变成了矩形覆盖。
于是扇形的半径就是举行的宽。
我们发现$a_1<a_2$就直接搞,那$a_1>a_2$呢?
我们可以将$[a_1,a_2],a_1>a_2$拆成$[a_1,m]+[-m,a_2]$,这个问题就解决了。
将每个矩形拆成两个操作:加入宽或删除宽。
这玩意很显然用权值线段树就好。
不会?静态区间第$k$大写过没?主席树写过没?
然后用扫描线把所有询问差分一下。
每进行一次操作,用线段树找当前的第$k$大(也就是找当前用来算答案的的半径是多少)。
然后就是一波乱搞算出答案了。
附上奇丑无比的代码:
#include<iostream>
#include<algorithm>
#include<cstdio>
#define LSON rt<<1
#define RSON rt<<1|1
#define DATA(x) a[x].data
#define LSIDE(x) a[x].l
#define RSIDE(x) a[x].r
#define MAXN 100010
using namespace std;
int n,m,q,d=0;
struct Segment_Tree{int data,l,r;
}a[MAXN<<2];
struct Fan{int r,x,c;
}b[MAXN<<2];
inline int read(){int date=0,w=1;char c=0;while(c<'0'||c>'9'){if(c=='-')w=-1;c=getchar();}while(c>='0'&&c<='9'){date=date*10+c-'0';c=getchar();}return date*w;
}
inline bool cmp(const Fan &p,const Fan &q){return p.x<q.x;
}
inline void add(int r,int x,int y){d++;b[d].r=r;b[d].x=x;b[d].c=1;d++;b[d].r=r;b[d].x=y;b[d].c=-1;
}
inline void pushup(int rt){DATA(rt)=DATA(LSON)+DATA(RSON);
}
inline void buildtree(int l,int r,int rt){LSIDE(rt)=l;RSIDE(rt)=r;if(l==r){DATA(rt)=0;return;}int mid=l+r>>1;buildtree(l,mid,LSON);buildtree(mid+1,r,RSON);pushup(rt);
}
void update(int l,int r,int c,int rt){if(l<=LSIDE(rt)&&RSIDE(rt)<=r){DATA(rt)+=c;return;}int mid=LSIDE(rt)+RSIDE(rt)>>1;if(l<=mid)update(l,r,c,LSON);if(mid<r)update(l,r,c,RSON);pushup(rt);
}
int query(int k,int rt){if(k<=0)return 0;if(DATA(rt)<k)return 0;if(LSIDE(rt)==RSIDE(rt))return LSIDE(rt);if(k<=DATA(LSON))return query(k,LSON);else return query(k-DATA(LSON),RSON);
}
void work(){long long ans=0;for(int i=1;i<=d;i++){if(i>1){int k=query(DATA(1)-q+1,1);if(k)ans+=1LL*k*k*(b[i].x-b[i-1].x);}update(b[i].r,b[i].r,b[i].c,1);}printf("%lld\n",ans);
}
void init(){int r,x,y,maxn=0;n=read();m=read();q=read();for(int i=1;i<=n;i++){r=read();x=read();y=read();x+=m;y+=m;maxn=max(maxn,r);if(x<=y)add(r,x,y);else{add(r,0,y);add(r,x,(m<<1));}}sort(b+1,b+d+1,cmp);buildtree(1,maxn,1);
}
int main(){init();work();return 0;
}

转载于:https://www.cnblogs.com/Yangrui-Blog/p/9525157.html

BZOJ4418: [Shoi2013]扇形面积并相关推荐

  1. bzoj4418 [Shoi2013]扇形面积并

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

  2. bzoj4418 [Shoi2013]扇形面积并 扫描线+二分+树状数组

    Description 给定N个同心的扇形,求有多少面积,被至少K个扇形所覆盖. 对于100%的数据,1≤n≤105, 1≤m≤106,1≤k≤5000,1≤ri≤105,-m≤a1,a2≤m Sol ...

  3. bzoj 4418: [Shoi2013]扇形面积并

    题意:给定N个同心的扇形,求有多少面积,被至少K个扇形所覆盖. 题解:很明显,最后结果肯定是几个扇形的面积的和.因为扇形面积=πR2×r−l2m=\pi R^2\times\frac{r-l}{2m} ...

  4. [Luogu P3997] [BZOJ 4418] [SHOI2013]扇形面积并

    洛谷传送门 BZOJ传送门 题目描述 给定 nnn 个同心的扇形,求有多少面积,被至少 k" role="presentation" style="positi ...

  5. SHOI2013 扇形面积并

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

  6. 圆周角、圆心角、弦、弦心距、弧长、扇形面积

    连接圆上任意两点的线段叫做弦,经过圆心的弦叫做直径,直径是一个圆里最长的弦 顶点在圆周上,并且两边都和圆相交的角叫做圆周角 顶点在圆心上的角叫做圆心角 ∠ACB.∠CBA.∠CAB都是圆周角:∠AOB ...

  7. 扇形面积公式,这样验证起来秒懂!

    扇形是一个非常有意思的几何图形,它是在圆的基础上得到的,那么它的面积该怎么算呢?是否要借助圆形来得到呢?答案是肯定的,下面就一起来学习验证扇形面积公式的方法. 由于黑板式教学的局限性,现在都是多媒体教 ...

  8. 扇形面积公式如何推导?

    中学时代,会接触并学习一些简单的几何图形,比如圆形,在熟练掌握了圆的有关知识后,会衍生出其它几何图形,比如扇形,就是在圆的基础上进行研究的.为了让学生们明白扇形面积公式的又来,可以利用专业的绘图工具制 ...

  9. 数学知识-扇形弧长、扇形面积

    圆周长C=2πrC=2 \pi rC=2πr 圆面积S圆=πr2S_圆=\pi r^2S圆​=πr2 扇形弧长 n是圆心角度数(角度制),α是圆心角度数(弧度制) 因,l弧=n360C圆因, l_弧= ...

最新文章

  1. 未来,App 就是一个人的全部
  2. X431 元征诊断枪
  3. 网站推广——网站推广专员是如何对竞争对手网站进行分析总结的?
  4. SAP UI5 应用开发教程之十四 - 嵌入视图的使用方式
  5. Laravel Kernel引导流程分析
  6. PS命令总结-实战经验
  7. Oracle的一些资料
  8. asp.net处理机制管道事件
  9. 电视机顶盒搜台原理和方法简析
  10. 服装企业ERP软件哪个公司好?施行服装ERP体系的要点是什么
  11. mac 微信多开 应用程序多开
  12. radius pap 加/解密算法实现-golang
  13. 常用的激活函数sigmoid,relu,tanh
  14. 钱宝网500亿的“庞氏骗局”崩塌始末
  15. 教师资格中学计算机知识点,2017年教师资格证《信息技术》高频考点
  16. 【PCB开源分享】STC8A8K64D4开发板
  17. DGP链游公会首发合作项目——D.G.Pals
  18. 基于二维矩阵的FFT计算原理
  19. vim 精确匹配查找单词
  20. 《数据安全法》今起正式实施,隐私计算迎来千亿级风口|潜在风向标

热门文章

  1. 华为云服务-应用部署3-前端组件部署
  2. JS实现字体放大或缩小
  3. 用集成显卡刷独立显卡BIOS
  4. 谢谢!yefuna@gmail.com
  5. 全国青少年软件编程(Scratch)等级考试一级考试真题2022年6月——持续更新.....
  6. 影响大学生就业的八个观念
  7. 听风中叶老师讲《flex4与服务器》感
  8. 7-171 打擂法找最大的数
  9. 基于 HTML、CSS、JavaScript 的百度首页设计(一)
  10. windows域常见问题集锦