bzoj4418 [Shoi2013]扇形面积并
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=4418
【题解】
被题目名称吓死系列。
用一棵线段树维护当前有哪些半径。
那么将扇形差分,每段空白区域相当于查询线段树内第K大。
权值线段树就行啦!
O(nlogn)
- # include <stdio.h>
- # include <string.h>
- # include <iostream>
- # include <algorithm>
- // # include <bits/stdc++.h>
- using namespace std;
- typedef long long ll;
- typedef long double ld;
- typedef unsigned long long ull;
- const int M = 5e5 + ;
- const int mod = 1e9+;
- # define RG register
- # define ST static
- int n, m, K;
- struct pa {
- int r, pos;
- int f;
- pa() {}
- pa(int r, int pos, int f) : r(r), pos(pos), f(f) {}
- friend bool operator <(pa a, pa b) {
- return a.pos < b.pos;
- }
- }p[M]; int pn = ;
- namespace SMT {
- int sz[M];
- # define ls (x<<)
- # define rs (x<<|)
- inline void edt(int x, int l, int r, int pos, int del) {
- if(l == r) {
- sz[x] += del;
- return ;
- }
- int mid = l+r>>;
- if(pos <= mid) edt(ls, l, mid, pos, del);
- else edt(rs, mid+, r, pos, del);
- sz[x] = sz[ls] + sz[rs];
- }
- inline int query(int x, int l, int r, int rk) {
- if(l == r) return l;
- int mid = l+r>>;
- if(sz[rs] < rk) return query(ls, l, mid, rk-sz[rs]);
- else return query(rs, mid+, r, rk);
- }
- inline int query(int rk) {
- if(sz[] < rk) return ;
- else return query(, , 1e5, rk);
- }
- }
- int main() {
- cin >> n >> m >> K;
- for (int i=, r, a1, a2; i<=n; ++i) {
- scanf("%d%d%d", &r, &a1, &a2);
- p[++pn] = pa(r, a1, );
- p[++pn] = pa(r, a2, -);
- if(a1 > a2) {
- p[++pn] = pa(r, -m, );
- p[++pn] = pa(r, m, -);
- }
- }
- ll ans = ;
- int lst = -1e9;
- sort(p+, p+pn+);
- // for (int i=1; i<=pn; ++i) printf("pos = %d, r = %d, del = %d\n", p[i].pos, p[i].r, p[i].f);
- for (int i=; i<=pn; ++i) {
- int ps = p[i].pos, j=i;
- if(lst != -1e9) {
- int R = SMT::query(K);// cout << p[i].pos << ' ' << R << endl;
- ans += 1ll * R * R * (p[i].pos - lst);
- }
- while(j+ <= pn && p[j+].pos == p[i].pos) ++j;
- for (int k=i; k<=j; ++k)
- SMT::edt(, , 1e5, p[k].r, p[k].f);
- lst = p[i].pos;
- i = j;
- }
- cout << ans;
- return ;
- }
bzoj4418 [Shoi2013]扇形面积并的更多相关文章
- 【BZOJ4418】[Shoi2013]扇形面积并 扫描线+线段树
[BZOJ4418][Shoi2013]扇形面积并 Description 给定N个同心的扇形,求有多少面积,被至少K个扇形所覆盖. Input 第一行是三个整数n,m,k.n代表同心扇形的个数,m用 ...
- 4418: [Shoi2013]扇形面积并|二分答案|树状数组
为何感觉SHOI的题好水. ..又是一道SB题 从左到右枚举每个区间,遇到一个扇形的左区间就+1.遇到右区间就-1,然后再树状数组上2分答案,还是不会码log的.. SHOI2013似乎另一道题发牌也 ...
- SHOI2013 扇形面积并
题目链接:戳我 补一张图 我们尝试把圆上的扇形转化成直线上的矩形--我们维护[1,2*m]的区间,那么每个能产生贡献的子区间的长度*第K大的半径的平方的总和就是answer了. 怎么转化呢?左端点为a ...
- SHOI 2013 【扇形面积并】
早上考的,我打了80分的部分分,出来和同学讨论的时候真想扇自己一巴掌...... 题目描述: 给定 n 个同心的扇形,求有多少面积,被至少k 个扇形所覆盖. 输入输出格式 输入格式: 第一行是三个整数 ...
- OI题目类型总结整理
## 本蒟蒻的小整理qwq--持续更新(咕咕咕) 数据结构 数据结构 知识点梳理 数据结构--线段树 推荐yyb dalao的总结--戳我 以后维护线段树还是把l,r写到struct里面吧,也别写le ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- bzoj4418&&bzoj4419&&bzoj4420:SHOI2013Day2题解
这三题截止现在(2016.3.11)窝居然都是跑的最快的……可啪…… T1 bzoj4418 这题叫做扇形面积并,看到这个名字我就方了,因为我不会计算几何啊QAQ 一看题目,发现是傻逼题……(雾) 又 ...
- 求两圆相交部分面积(C++)
已知两圆圆心坐标和半径,求相交部分面积: #include <iostream> using namespace std; #include<cmath> #include&l ...
- POJ 2986 A Triangle and a Circle 圆与三角形的公共面积
计算几何模板 #include<stdio.h> #include<string.h> #include<stdlib.h> #include<math.h& ...
随机推荐
- python web框架的介绍
随着互联网的兴起,web开发变得愈发的重要.Python作为当前火热的语言, 其中的web开发框架可以说是百花齐放,下面聊一聊这些框架. 一: 基于Python的代表性Web框架 Django Dja ...
- B1016 部分A+B (15分)
B1016 部分A+B (15分) 输入格式: 输入在一行中依次给出 A.DA.B.DB,中间以空格分隔,其中 \(0<A,B<10^10\). 输出格式: 在一行中输出 PA+PB的值. ...
- ABAP CDS - SELECT, association
ABAP CDS - SELECT, association Syntax ... ASSOCIATION [ [min..max] ] TO target [AS _assoc] ON cond_e ...
- PHP.35-TP框架商城应用实例-后台11-商品分类-删除分类(2种方法)、添加、修改
删除分类 删除一个分类的同时,其所有子分类都删除 在控制器CategoryCtroller.class.php中添加删除函数(delete) 在分类模型中添加钩子函数_before_delete()[ ...
- luogu3317 [SDOI2014]重建
原来矩阵树定理对于边是概率的情况也是适用的qwqwq. ref #include <iostream> #include <cstdio> #include <cmath ...
- Nuget 异常引用记录
事件描述 Nuget未能将packages.config中的dll成功引入项目中 解决办法 从Nuget中删除对NewtonSoft.Json的引用并重新对NewtonSoft.Json 4.5.0. ...
- Python SimpleHTTPServer简单HTTP服务器
搭建FTP,或者是搭建网络文件系统,这些方法都能够实现Linux的目录共享.但是FTP和网络文件系统的功能都过于强大,因此它们都有一些不够方便的地方.比如你想快速共享Linux系统的某个目录给整个项目 ...
- Java基础-4变量与数据类型
变量:变量是Java程序中的一个基本存储单元.变量是一个标识符.类型及一个可选初始值的组合定义.所有的变量都有一个作用域,即变量在某一区域有效. 基本的变量声明方式如下: int a; float b ...
- Python全栈工程师
ParisGabriel Python 入门基础 print(“hello world”)变量 : 存储信息的,日后被调用.修改操作常量: 固定不变的量,字母大写命名规则:1. 字母数 ...
- c#中onclick事件请求的两种区别
在C#中如果是asp控件的button有两个click的调用,一个是OnClick,一个是OnClientClick.那么这两者有什么区别呢,下面就来说说区别. <asp:Button ID=& ...