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& ...
随机推荐
- JavaSE 第二次学习随笔(作业一)
package homework2; import java.io.ObjectInputStream.GetField; import java.util.Arrays; public class ...
- python之获取微信好友列表并保存文档中
代码如下 from wxpy import * from pprint import pprint #登录微信 bot = Bot() my_friend = bot.friends() f = op ...
- source insight插件
直使用sourceinsight编辑C/C++代码,sourceinsight是一个非常好用的编辑工具可以任意定位,跳转,回退,本人一直 使用该工具做C/C++开发,sourceinsight能够满足 ...
- 12-optionBinding
1-创建一个空的dotnet mvc网站 2- 创建appsettings.json文件, 这文件会默认被绑定 { "ClassNo": "1", " ...
- 【文件处理】RandomAccessFile
一,RandomAccessFile的用途: 使用RandomAccessFile的最大好处在于,一般的InputStream和OutputStream类对于文件都是顺序读取的,不能跳跃读取数据.而R ...
- java程序——凯撒加密
古罗马皇帝凯撒在打仗时曾经使用过以下方法加密军事情报: 请编写一个程序,使用上述算法加密或解密用户输入的英文字串要求设计思想.程序流程图.源代码.结果截图. 设计思想:输入一个字符串,然后将其中每 ...
- Eclipse 修改字符集---Eclipse教程第02课
默认情况下 Eclipse 字符集为 GBK,但现在很多项目采用的是 UTF-8,这是我们就需要设置我们的 Eclipse 开发环境字符集为 UTF-8, 设置步骤如下: 在菜单栏选择 Window ...
- 剑指Offer - 九度1516 - 调整数组顺序使奇数位于偶数前面
剑指Offer - 九度1516 - 调整数组顺序使奇数位于偶数前面2013-11-30 02:17 题目描述: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部 ...
- CodeIgniter学习笔记一:基本结构、控制器、视图、超级对象、数据库
一.基本结构 CodeIgniter3.0.0解压后有8个文件,分别是: application:项目文件 system:系统(框架)文件,为方便升级,不建议修改 user_guid:用户手册,不需要 ...
- 24、php知识点总结基础教程--part-2
1.表单处理 ①post请求 <html> <body> <form action="welcome.php" method="post&q ...