永恆的契約

2021-07-24 08:20:46 字數 3278 閱讀 7474

宅邸迅速的燃燒著,必須帶貝蒂走出**庫!憑著感覺,又一次直接找到**庫的門。

「你,是那個人嘛?」400年了,當初聖域建立結界時沒有進入聖域,被傷了心的人工精靈貝蒂,與強欲魔女簽訂契約,守護宅邸的**庫,直至「那個人」的到來,那個人會解開貝蒂的心結。

「我不是那個什麼人,但我會成為你唯一的人。我會給你幸福!」

精靈與人簽訂契約,從此相依為命。這便是,永恆的契約。

宅邸裡,羅茲瓦爾的房間圖書櫃後,有一條鏈結宅邸和聖域的秘密通道,其中有乙個神奇的大回環,由

n n

塊石頭組成。

第i塊石頭有乙個高度ai

a

i,兩塊不同的石頭i,j能夠互相看到,則它們在環上的兩條路徑中有至少一條路徑上除了兩個端點(即i,

j i,j

)路徑上石頭高度都不大於mi

n(ai

,aj)

m in

(ai,

aj)。

被羅茲瓦爾僱傭的獵腸者躲在這秘密的通道中,為了能夠更好的觀察通道中的情況,她想知道有多少對石頭能夠互相看到。

第一行乙個正整數

t t

,表示資料組數。

接下來t

t

組資料,每組資料第一行讀入正整數

n n

,接下來一行按順時針順序讀入序列

a a

表示石塊的高度。

t t

行表示每組資料的答案。

1 5

1 2 4 5 340%

,n≤20040%

,n

≤200

60%,

n≤200060%

,n

≤2000

70%,

n≤10000070%

,n

≤100000

80%,

n≤1000000,1

≤ai≤

100000080%

,n

≤1000000,1

≤ai≤

1000000

100%,

n≤1000000,t

≤5,1

≤ai≤

1000000000

100%,n

≤1000000,t

≤5,1

≤ai≤

1000000000

首先對於像這種對於環的題目一般首先會有這樣的思路:

①將這段序列複製一段

②選乙個作「起點」,該起點的作用就是可以斷絕前後關係。

比如這道題,我們就選最大的ai

a

i作起點,若存在多個最大點則任選乙個,不影響。

接下來就談談做法吧。

我們設a

1 a

1為最大值,那麼該序列就變為a1

,a2,

a3,.

..an

a 1,

a2,a

3,..

.a

n,另外注意在最後再加乙個an

+1=a

1 an+

1=a1

,表示首尾相接。

我們假定

i<

j i

<

j,那麼我們現在要求所有aiai

且能互相看見的對數。由a

ia

i

易得∀a

[i+1..j−

1]≤a

i ∀a[

i+

1..j−1

]≤ai

,所以能與ai

a

i匹配的aj

a

j是第乙個比ai

a

i大的數,即存在唯一性!

我們設這個aj

a

j為ne

xt[i

] nex

t[i]

。 所以除了ai

=a1 ai=

a1

的aia

i外(即為該數亦為最大值),其實全部的ai

a

i都有與之對應的ne

xt[i

] nex

t[i]

,可以線性統計答案,具體來講就是單調棧維護不上公升序列

但是為了保證不算重,所以我們要將那些 aj

=an+

1 aj=

an+1

(即a1

a

1) 的數打上ta

g tag

,然後我們倒過來再做一遍統計答案,遇到帶有ta

g tag

且next[i

]=a1

n ex

t[i]

=a

1的就不必算入答案內。

那麼ai

=aj ai=

aj

的情況呢

顯然我們也可以在單調棧中統計連續的數出現的次數。

神馬?還不懂?如果出現次數是

z z

,那不就有z∗

(z−1

)/2 z∗(

z−1)

/2

嗎?

#include

#define maxn 1000005

using namespace std;

int a[2

*maxn],dt[2

*maxn],p[2

*maxn];

long long ans,z,d;

int st,t,n,i,j,ma,t2;

int main()

}d=1;dt[d]=st;

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

d--;

}ans+=z*(z+1)/2;z=0;

dt[++d]=i;dt[d+1]=0;

}ans+=(d-1)*(d-2)/2;

d=1;dt[d]=st+n;

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

dt[++d]=i;dt[d+1]=0;

}printf("%lld\n",ans);

}fclose(stdin);

fclose(stdout);

}

JZOJ4848 永恆的契約

description 宅邸迅速的燃燒著,必須帶貝蒂走出 庫!憑著感覺,又一次直接找到 庫的門。你,是那個人嘛?400年了,當初聖域建立結界時沒有進入聖域,被傷了心的人工精靈貝蒂,與強欲魔女簽訂契約,守護宅邸的 庫,直至 那個人 的到來,那個人會解開貝蒂的心結。我不是那個什麼人,但我會成為你唯一的人...

JZOJ4848 永恆的契約

給定乙個長度為 n 的環,每個位置有乙個高度ai 當在環上的兩條路徑中有至少一條路徑上除了兩個端點,路徑上的高度都不大於mi n ai aj 時,i,j 可以互相看到。求有多少對可以互相看到的點對。t組資料。data constraint t 5,n 1000000 因為是環,所以可以先copy一遍...

GDOI2017模擬11 3 永恆的契約

description 宅邸迅速的燃燒著,必須帶貝蒂走出 庫!憑著感覺,又一次直接找到 庫的門。你,是那個人嘛?400年了,當初聖域建立結界時沒有進入聖域,被傷了心的人工精靈貝蒂,與強欲魔女簽訂契約,守護宅邸的 庫,直至 那個人 的到來,那個人會解開貝蒂的心結。我不是那個什麼人,但我會成為你唯一的人...