城市改造 city

2021-09-10 22:30:13 字數 2749 閱讀 3083

為了節約當前社會巨大的能源消耗,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 11 3

3 135 135

1 23 90 100

1 42 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

本題共有 20 個測試點,每個測試點 5 分。對於所有的測試點,滿足0

對於操作1與操作2,假設需要安裝或拆除的收集器為xx,滿足0

對於操作3,滿足0

【提示】

本題中需要涉及角度與斜率之間的轉化。請注意,在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

精度較高

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

可能是負數,要判掉

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

#include#include#include#include#include#include#define maxn 100005

#define pi acos(-1)

using namespace std;

int n,t,top,tree[maxn*4],tot,ans[maxn*4];

struct node

zh[1]=h[0];top=1;

for(int i=1;i<=n;i++)

zh[1]=h[n+1];top=1;

for(int i=n;i>=1;i--)

//for(int i=1;i<=n;i++)cout<

posted @

2018-08-20 20:42

liankewei 閱讀(

...)

編輯收藏

HNOI2010 CITY城市建設

動態改邊權ms t mst 考慮和線段樹分治 l ct lc t一樣的思想,對修改時間分治 考慮一段時間的修改的那些邊 暴力就是當l r l r 時直接讓修改生效 然後求一遍ms t role presentation style position relative mst mst 這樣是不行的因為...

2001 Hnoi2010 City 城市建設

time limit 20 sec memory limit 162 mb submit 1098 solved 539 submit status discuss ps國是乙個擁有諸多城市的大國,國王louis為城市的交通建設可謂絞盡腦汁。louis可以在某些城市之間修建道路,在不同的城市之間修建...

嵊州D6T2 城市 city

眾所周知,why 是czyz 王國的國王。czyz 王國一共有n 個城市,每個城市都有一條道路連向乙個城市 可能連向這個城市自己 同時,對於每乙個城市,也只有一條道路連向它。如果乙個人可以通過道路可以從城市x 走向城市y,那麼我們稱 x,y 這 個數對是滿足條件的。x 可以等於y 現在why 可以選...