题目描述

小喵喵和小聪聪从小就是好朋友 ,他们经常在一起玩耍 。如今小喵已经厌倦了自己居住的环境,想请小聪聪为她建一个新家。
小喵喵天生多才多艺,对多种乐器颇有研究。对于生活中常见的图形,她对圆形很感兴趣,因此小聪聪决定为她建一个圆形的新家。
我们设新家在一个平面直角坐标系上,其中新家的圆心为平面直角坐标系的原点。
小聪聪有一把神奇的剪刀,他定义了一个值m,以等分 [−pi,pi]弧度 (详见样例)。他还有一支神奇的画笔,将进行 n次“铺地毯”操作。对于第i 次“铺地毯”操作,他将设定一个半径ri,起始位置si,终止位置ti ,然后从圆心角pi*si/m到圆心角pi*ti/m这部分区域逆时针铺上一个扇形地毯。
小喵喵想到了一个奇怪的问题,她想知道有多大面积被至少铺过k次地毯。 这个问题一下就难倒了聪明的小聪聪。 现在小聪聪求助于你,你能帮他解决这个问题吗?为了方便表达 ,设答案的值为T,你只需要输出 T×2m/pi的值即可 。

Input
第一行是三个整数 n,m,k,含义 如题目描述中所述。
接下来n行, 每行描述一次铺地毯操作 。第i行有三个整数r,si,ti,含义 如 题目描述中所述。

Output
输出 一个整数 表示T×2m/pi的值。

Sample Input
3 8 2
1 -8 8
3 -7 3
5 -5 5

Sample Output
76

Data Constraint

Hint

分析

看题以后容易想到把圆展开变成数列,就可以用线段树维护有多少个操作覆盖了某块了
输出整数出题人真好
然后我们可以记录区间断点正负改变的方法用权值线段树找到半径值,累加
开long long

#include <iostream>
#include <cstdio>
#define rep(i,a,b) for (i=a;i<=b;i++)
typedef long long ll;
using namespace std;
int c[800001];
struct Num {int st,r,zf;
}a[400001];
int cnt;
int n,m,k;
int last[400001],fa[400001];void Change(int x,int l,int r,int key,int p) {if (l==r) {c[x]+=p;return;}int mid=l+r>>1;if (key<=mid) Change(x*2,l,mid,key,p);else Change(x*2+1,mid+1,r,key,p);c[x]=c[x*2+1]+c[x*2];
}int Query(int x,int l,int r,int key) {if (l==r) return c[x]>=key?l:0;int mid=l+r>>1;return c[x*2+1]>=key?Query(x*2+1,mid+1,r,key):Query(x*2,l,mid,key-c[x*2+1]);
}int main() {int i,j;scanf("%d%d%d",&n,&m,&k);rep(i,1,n) {int s,t,rg;scanf("%d%d%d",&rg,&s,&t);if (s==-m||s==m) {a[++cnt].st=-m;a[cnt].r=rg;a[cnt].zf=1;a[++cnt].st=t;a[cnt].r=rg;a[cnt].zf=-1;}else {if (t==-m) t=m;if (s<=t) {a[++cnt].st=s;a[cnt].r=rg;a[cnt].zf=1;a[++cnt].st=t;a[cnt].r=rg;a[cnt].zf=-1;}else {a[++cnt].st=s;a[cnt].r=rg;a[cnt].zf=1;a[++cnt].st=m;a[cnt].r=rg;a[cnt].zf=-1;a[++cnt].st=-m;a[cnt].r=rg;a[cnt].zf=1;a[++cnt].st=t;a[cnt].r=rg;a[cnt].zf=-1;}}   }rep(i,1,cnt) {j=a[i].st+m;fa[i]=last[j];last[j]=i;}ll ans=0;rep(i,-m,m-1) {for (j=last[i+m];j;j=fa[j]) Change(1,1,100000,a[j].r,a[j].zf);ll q=Query(1,1,100000,k);ans+=q*q;}printf("%lld",ans);
}

[线段树]小喵喵的新家相关推荐

  1. 手把手教你搭建网盘系统,给小姐姐换个新家可好​?

    在数据时代,我们每天都在互联网上生成大量数据,同时也接收着大量数据.随着图片.音乐.影视.课程越来越多,不管是手机.iPad 还是电脑,空间根本不够用,所以很多人会把文件存在各种网盘里. 但近几年,网 ...

  2. 可持久化线段树(静态)【学习笔记】

    (静态)主席树入门 前置知识:动态开点线段树,权值线段树. 1)权值线段树:相当于将线段树当成一个桶,其中的每一个点所代表的区间相当于一段值域.维护的值为这段值域中的一些信息. 例如该图,节点2代表的 ...

  3. 一些奇妙的线段树操作

    学过数据结构和会做题完全是两个概念orz 各种各样的题目都应该见识一下 简单的目录: 最大连续长度 吉司机线段树 线段树合并/分裂 最大连续长度问题 典型题目:HDU 3911 ($Black$ $A ...

  4. 【HDU - 1166】敌兵布阵 (线段树模板 单点更新+ 区间查询)

    题干: C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情 ...

  5. NOIP2017 列队——动态开点线段树

    Description: Sylvia 是一个热爱学习的女♂孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Sylvia 所在的方阵中有n×m名学生,方阵的行数为  ...

  6. 【BZOJ1568】【Tyvj3490】Blue Mary开公司 李超线段树

    Time:2016.08.02 Author:xiaoyimi 转载注明出处谢谢 传送门1 传送门2 思路: 题意大致为 维护有斜率和截距的若干直线,并求直线x=T(T∈N)与当前已加入直线交点的ym ...

  7. 「一题多解」【CodeForces 85D】Sum of Medians(线段树 / 分块)

    题目链接 [CodeForces 85D]Sum of Medians 题目大意 实现一个setsetset,支持插入,删除,求∑a5k+3∑a5k+3\sum a_{5k+3}.注意,setsets ...

  8. 【转载】线段树题目2

    1.hdu1166 敌兵布阵 更新节点,区间求和. 2.hdu1754 I Hate It 更新节点,区间最值. . 3.hdu1698 Just a Hook 成段更新,总区间求和. . 4.hdu ...

  9. 【NOIP2013模拟】小喵喵的新家

    Description 小喵喵和小聪聪从小就是好朋友 ,他们经常在一起玩耍 .如今小喵已经厌倦了自己居住的环境,想请小聪聪为她建一个新家. 小喵喵天生多才多艺,对多种乐器颇有研究.对于生活中常见的图形 ...

最新文章

  1. 【ACM】删数问题(待更)
  2. s8 android 8.0变化,细数三星Galaxy S8升级安卓8.0系统后的那些变化,看完决定
  3. django 解决cors问题
  4. 博客阅读学习笔记-目录
  5. rawquery 没扎到返回什么_Flutter之踩坑的日子(RawQuery的使用)
  6. vex夹球机器人_汕头市4名中学生获2020年VEX机器人世锦赛初中组亚军
  7. 基于K60/K66/LPC的HC-SR04超声波测距(附带代码)
  8. 马斯克扎心了!猎鹰重型火箭核心助推器运输过程中坠海
  9. 实验4-2-3 验证“哥德巴赫猜想” (20 分)
  10. 变量的语法扩展(JS)
  11. 对double变量进行四舍五入并保留两位小数
  12. arm 基础:Nand Flash与Nor Flash的区别
  13. 就问你慌不慌:每天都有 一百万 程序员在投简历
  14. [导入]QZONE跳转FLASH地址生成工具
  15. 实心和空心哪个抗弯能力强_为什么轮胎不设计成实心的?不怕爆胎 480阅读
  16. UISwitch的使用 - IOS
  17. Anjuta安装使用
  18. 上山的路上,总得给自己一点阳光。
  19. Codeforces 274E. Mirror Room-模拟+STL
  20. 视频去水印在线网站?

热门文章

  1. 7.8 Git 工具 - 高级合并
  2. 独立开发者接入防沉迷尽然如此简单?-TapTap 防沉迷模块Android版
  3. mysql中获取时间的年月日_详解mysql 获取当前日期及格式化
  4. C语言中符号表示什么意思?举例说明
  5. 蓝牙透传实验_蓝牙模块比较常见的通讯方式透传是什么
  6. android自定义刻度线,Android自定义控件之刻度尺控件
  7. Flowable—基本概念和重要名词解释
  8. 【JavaScript】用字符串进行for循环
  9. 人在旅途——》张家界之旅:20180419
  10. 6-10 两个字符串穿插 (10分)pta,c