城市改造 (city)

题目描述

为了节约当前社会巨大的能源消耗,A 城市发起了新能源改造计划,也就是用太阳能代替旧能源。为了简化题意,可以假设 A 城市在一个二维平面上,平面上从11到nn每一个地方都有一栋高楼,高楼的宽度忽略不计。每栋高楼高度为hihi。城市左右两边分别有一座高度为h0h0和hn+1hn+1的高山。每一天,太阳从右边升起,左边落下。

城市改造总共用了TT时刻。每一时刻都发生一下三件事件中的一个事件:

1. 在第ii栋高楼顶端安装太阳能收集器。太阳能收集器只有在光线照射下才能工作。

2. 由于太阳能收集器有寿命,所以将第ii栋高楼上的太阳能收集器拆除。

3. 询问在一天中某一时刻至某一时刻有多少太阳能收集器始终在工作。

你的任务就是对于每个第33种事件,输出有多少太阳能收集器始终在工作。

注意:

太阳能收集器在光线照射下,当且仅当在这一时刻它之前没有遮挡物(包括高楼最高点)。如图,若太阳在下午以45°角照射 A 城,此时图中点2,32,3是不工作的,点1,41,4是工作的。

为了方便确定一天中的时刻,我们将以太阳高度角的形式给出。对于上午,我们给出太阳高度角,而下午,则给出太阳高度角的补角。

输入

第一行,两个数nn和TT。

第二行,输入n+2n+2个整数,第ii个数表示hi−1hi−1。

接下来TT行,每行2∼32∼3个整数。如果第一个数为11,则第二个数表示在第ii栋高楼顶端安装太阳能收集器。如果第一个数为22,则第二个数表示将第ii栋高楼上的太阳能收集器拆除。如果第一个数为33,则输入两个数ta,tbta,tb,表示起始时刻与终止时刻的太阳高度角。

输出

对于每个询问,输出有多少太阳能收集器始终在工作。

样例输入

4 10
5 4 2 6 5 3
1 1
1 3
3 135 135
1 2
3 90 100
1 4
2 3
3 45 50
3 46 50
3 85 95

样例输出

1
3
1
2
3 

提示

【样例输入输出 2】

见下放文件 city/city2.in 和 city/city2.ans。这部分样例与第 4 个测试点范围相同。

【样例输入输出 3】

见下放文件 city/city3.in 和 city/city3.ans。这部分样例与第 7 个测试点范围相同。

【样例输出输出 4】

见下放文件 city/city4.in 和 city/city4.ans。这部分样例与第 14 个测试点范围相同。

【样例输出输出 5】

见下放文件 city/city5.in 和 city/city5.ans。这部分样例与第 17 个测试点范围相同。

【子任务】

测试点编号

n

T

特殊性质

1

≤105≤105

=1=1

2

≤100≤100

≤100≤100

3

4

≤1000≤1000

≤1000≤1000

5

6

7

≤105≤105

≤10≤10

8

9

10

≤105≤105

除h0h0和hn+1hn+1,所有的hihi都相等

11

12

满足所有的$t_a=t_b$

13

14

特殊性质S

15

16

17

18

19

≤3×105≤3×105

20

特殊性质S:保证nn为奇数,且对于所有i(0≤i≤n+1)i(0≤i≤n+1),假设hihi的最大值为mm。如果ii为偶数,保证hi=mhi=m。如果ii为奇数,保证hi<mhi<m。

本题共有 20 个测试点,每个测试点 5 分。对于所有的测试点,满足0<n≤105,0<m≤3×1050<n≤105,0<m≤3×105。对于每栋高楼,满足0<hi≤1080<hi≤108。

对于操作1与操作2,假设需要安装或拆除的收集器为xx,满足0<x≤n0<x≤n。对于操作1,保证之前第xx个收集器未安装。对于操作2,保证之前第xx个收集器已安装。

对于操作3,满足0<ta≤tb<1800<ta≤tb<180。

【提示】

本题中需要涉及角度与斜率之间的转化。请注意,在C++中可以调用三角函数为弧度制。


solution

啊啊啊调了一整天

atan2不会用,是(y,x)而不是(x,y)啊

cdq细节一直爆炸啊

小于写成小于等于啊

我fl=0就不操作,凭啥ans+=fl才能过啊

别人1.9k,我3k啊

最后真是一个个对拍才过

哇被气死

先用凸包求出太阳高度角范围:上凸壳上的点才会挡住它

然后就是经典三维偏序

qli>=li qri<=ri qt>=t

啊为什么这么难调

对了 几个技巧:

PI=acos(-1)或M_PI

精度较高

atan2(y,x)   y,x!!!

返回的是弧度,角度=t*108/PI;

可能是负数,要判掉

还有我又用sort,特慢哈哈哈

#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cmath>
#define maxn 100005
#define PI acos(-1)
using namespace std;
int n,T,top,tree[maxn*4],tot,ans[maxn*4];
struct node{double li,ri;int fl,id,q;void bug(){cout<<li<<' '<<ri;cout<<' '<<fl/*<<' '<<id<<' '<<q*/<<endl;}
}s[maxn],a[maxn*4];
struct no{int x,y;
}zh[maxn],h[maxn];
bool cmp(node a,node b){return a.li>b.li||a.li==b.li&&a.ri<b.ri||a.li==b.li&&a.ri==b.ri&&a.id<b.id;//return a.li>b.li||a.li==b.li&&fabs(a.fl)<fabs(b.fl);
}
bool R(node a,node b){return a.ri<b.ri||a.ri==b.ri&&a.id<b.id;
}
void jia(int k,int val){for(int i=k;i<=T;i+=i&-i)tree[i]+=val;
}
int ask(int k){int sum=0;for(int i=k;i;i-=i&-i)sum+=tree[i];return sum;
}
void cdq(int l,int r){if(l==r)return;int mid=l+r>>1;cdq(l,mid);cdq(mid+1,r);sort(a+l,a+mid+1,R);sort(a+mid+1,a+r+1,R);int i=l;//cout<<l<<' '<<r<<endl;for(int j=mid+1;j<=r;j++){while(a[i].ri<a[j].ri&&i<=mid){jia(a[i].id,a[i].fl);i++;//cout<<"bbb ";//a[i].bug();}if(a[j].fl==0){ans[a[j].q]+=ask(a[j].id);//cout<<"aaa "<<a[j].q<<' '<<a[j].id<<' '<<ans[a[j].q]<<endl;}//a[j].bug();}for(int j=l;j<i;j++)jia(a[j].id,-a[j].fl);
}
no xl(no aa,no bb){no t;t.x=aa.x-bb.x;t.y=aa.y-bb.y;return t;
}
double cj(no a,no b){return a.x*b.y-a.y*b.x;
}
int main()
{cin>>n>>T;for(int i=0;i<=n+1;i++){scanf("%d",&h[i].y);h[i].x=i; }zh[1]=h[0];top=1;for(int i=1;i<=n;i++){while(top>1&&cj(xl(zh[top],zh[top-1]),xl(h[i],zh[top]))>=0)top--;double x=h[i].x-zh[top].x,y=h[i].y-zh[top].y;double t=atan2(y,x);t=t*180/PI;//cout<<h[i].x<<' '<<h[i].y<<' '<<zh[top].x<<' '<<zh[top].y<<' '<<t<<endl;t+=180;if(t>180)t=180;s[i].li=t;zh[++top]=h[i];}zh[1]=h[n+1];top=1;for(int i=n;i>=1;i--){while(top>1&&cj(xl(zh[top],zh[top-1]),xl(h[i],zh[top]))<=0)top--;double x=h[i].x-zh[top].x,y=h[i].y-zh[top].y;double t=atan2(y,x);t=t*180/PI;//cout<<h[i].x<<' '<<h[i].y<<' '<<zh[top].x<<' '<<zh[top].y<<' '<<t<<endl;t+=180;if(t>180)t=0;s[i].ri=t;zh[++top]=h[i];}//for(int i=1;i<=n;i++)cout<<s[i].li<<' '<<s[i].ri<<endl;for(int i=1;i<=T;i++){int op,t;scanf("%d",&op);if(op==1){scanf("%d",&t);a[i].li=s[t].li;a[i].ri=s[t].ri;a[i].fl=1;}else if(op==2){scanf("%d",&t);a[i].li=s[t].li;a[i].ri=s[t].ri;a[i].fl=-1;}else {scanf("%lf%lf",&a[i].ri,&a[i].li);// li left ri righta[i].q=++tot;}a[i].id=i;}sort(a+1,a+T+1,cmp);//for(int i=1;i<=T;i++)a[i].bug();cdq(1,T);for(int i=1;i<=tot;i++)printf("%d\n",ans[i]);return 0;
}
/*
2 8
1 2 1 1
1 1
1 2
3 45 135
3 135 135
2 1
3 134 134
2 2
3 135 1354 10
5 4 2 6 5 3
1 1
1 3
3 135 135
1 2
3 90 100
1 4
2 3
3 45 50
3 46 50
3 85 95*/

城市改造 (city)相关推荐

  1. 8.9 NOIP模拟测试15 建设城市(city)+轰炸行动(bomb)+石头剪刀布(rps)

    鉴于T3的惨烈程度,我决定先来颓篇题解. T1 建设城市(city) 挡板法+容斥 m个建设队分成n组,每组必须有一个,先不考虑上限,共有 C(m-1,n-1)种方案. 有i个组是超过k个的,容斥掉 ...

  2. 建设城市(city)(【CCF】NOI Online 能力测试2 入门组第三题 )

    时间限制: 1.0 秒 空间限制: 256 MB 题目描述 球球是一位建筑师.一天,他收到市长的任务:建设城市.球球打算建造 2n 座高楼.为了保证城市美观,球球做出了如下计划: 球球喜欢整齐的事物. ...

  3. 2022年全球城市变迁研究报告

    第一章 全球城市概述 全球城市 (Global City),又称为世界城市 (World City).国际大都市或国际都会城市,是指在财富.社会.经济.文化及政治层面直接影响全球事务的城市.近年来,随 ...

  4. 复盘:智能城市如何成为『京东集团一级战略』?...

    3月21日,春分时节,京东城市作为京东集团的一级战略业务全新亮相. 京东集团副总裁.京东数字科技副总裁.京东城市事业部总裁郑宇教授正式发布了京东城市的全新品牌标识和英文名称--JD iCity,并再次 ...

  5. 布巴内斯瓦尔成智慧城市 印小城何以“智慧”

    在2月14日举行的布巴内斯瓦尔市"智慧生活日"活动中,学生们集体练习瑜伽. 核心阅读 印度打造百座"智慧城市"计划日前取得阶段性成果,综合评分领先的20座城市成 ...

  6. android仿ios城市选择,Android 省市区三级联动选择器(仿iOS滚轮实现)

    前言 在实际的项目中需要使用到省市区三级联动的功能,在网上找来找去,都没有找到一个合适的库, 所以自己就封装了一个,不需要自己添加数据源,直接引用即可,一行代码搞定城市选择.怎么简单,怎么方便,怎么来 ...

  7. 根据ip获得国家,省,城市,运营商

    //接口 http://counter.sina.com.cn/ip?ip=218.75.124.100 //传说没有腾讯的精确,但格式良好 编码是: GB2312 自己转一下 var ILData ...

  8. day28:检测磁盘io|自定义时段查看tomcat 日记|打印城市名字|代码上线|统计网站并发量...

    2019独角兽企业重金招聘Python工程师标准>>> 1.有一台阿里云的机器,接到反映说服务器的磁盘 io 很高,登录服务器查看,并没有发现问题,怀疑是间歇性的,看到造成磁盘 io ...

  9. Android 百度地图之全局搜索周边搜索全国搜索城市路线规划(升级版附源码)

    这个是今年3月份做的,拿出来分享哈,之前的一篇结构单一,现在这个新增路线规划: 路线1:无地铁 路线2:时间快 路线3:少换乘 路线4:少步行 如下图: 2.地点搜索(局部搜索)如下图: 3 定位功能 ...

最新文章

  1. 微软python在线学习_微软再推免费在线 Python 教程,面向数据科学和机器学习初学者...
  2. C++ 容器 LIST VECTOR erase
  3. [HOW TO]-ubuntu20.10环境上安装workpress
  4. 数据结构之字典序全排列
  5. java 画多边形_javascript绘制一个多边形
  6. EMOS1.3安装后的相关安全设置
  7. IBM语音识别系统实现错词率重大突破
  8. 【渝粤教育】国家开放大学2018年春季 0248-22T电工电子技术 参考试题
  9. matlab循环取出矩阵的某一行并标示上A1 A2 A3
  10. mysql时间日期函数
  11. 股东控股关系图谱简化版
  12. imac苹果一体机忘记开机密码,直接重置开机密码
  13. UG NX 12 抽取几何特征
  14. 服务器断电mysql文件丢失_服务器断电了怎么恢复数据?
  15. 介绍几个好用的小软件
  16. js 百度地图标记定位(一)
  17. 简易英文问答系统(glove.6B词向量)
  18. python 用tkinter 做一个简易番茄钟
  19. 在C++中 :: 的三种意思
  20. 建站助手配置mysql远程权限_建站助手设置数据库

热门文章

  1. weixin4j-pay~最简单的微信企业付款到银行卡SDK
  2. ASP.NET MVC--过滤器
  3. 我的大学(四)——反思与回顾
  4. mysql8.0 删除用户_MYSQL8 创建、删除用户和授权、消权操作
  5. python项目_闪送超市中商品模型类的type()探讨
  6. Mac查找JDK路径
  7. 免费开源的php源码加密--screw plus
  8. 2021年5月-国家注册审核员-《认证通用基础》真题4-解析版
  9. 爬虫实战之爬虫漫画(复现)
  10. 大一学了C语言有什么用,写个拼图小游戏表白女神,快学起来吧