JZOJ4848 永恆的契約

2021-07-24 08:01:41 字數 2238 閱讀 3896

description

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

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

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

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

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

第i塊石頭有乙個高度ai,兩塊不同的石頭i,j能夠互相看到,則它們在環上的兩條路徑中有至少一條路徑上除了兩個端點(即i,j)路徑上石頭高度都不大於min(ai,aj)。

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

input

第一行乙個正整數t,表示資料組數。

接下來t組資料,每組資料第一行讀入正整數n,接下來一行按順時針順序讀入序列a表示石塊的高度。

output

t行表示每組資料的答案。

sample input

1 5

1 2 4 5 3

sample output

data constraint

40%,n<=200

60%,n<=2000

70%,n<=100000

80%,n<=1000000,1<=ai<=1000000

100%,n<=1000000,t<=5,1<=ai<=1000000000

這題目腦洞是真的大,只會60分,然而還寫錯了檔名。。。。。。神tm多了個空格。題解:

如果i、j可以互相看到,那麼分情況考慮。

ai!=aj,假設ai>aj,那麼從j出發一直走ai是第乙個大於aj的,因此可以預處理left和right表示往左/右第乙個碰到的權值大於自己的,就可以檢驗i和j是否能互相看到。

ai=aj,同上,只不過是乙個碰到的權值大於自己的位置在i之後。

列舉任意兩塊石頭,用上述方法快速檢驗是否可以互相看到。

left和right可以用n^2的時間預處理。

因此總複雜度是n^2的。

然而會爆。

100%的做法:

首先,我們注意到可以先刪除環上最大值(多個任取乙個),將環轉化為鏈,而且刪去後只會影響這個最大值和其他石頭產生的答案,不會影響其餘任意兩塊石頭間的可看見關係。

ai

#include

#include

#include

#include

#define fo(i,a,b) for(int i=a;i<=b;i++)

using

namespace

std;

typedef

long

long ll;

const

int n=1e7+10;

int i,j,k,p,n,m,cas,t,w,x4,x3,x1,x2;

int a[n],b[n],size[n],bo[n],head[n],id[n];

ll ans;

int main()

w++;

b[w]=a[i];

id[w]=i;

size[w]=1;

bo[i]=1;

if (tif (b[w-1]==a[i])

else head[w]=w-1;

}fo(i,1,n)

w++;

b[w]=a[i];

id[w]=i;

size[w]=1;

if (bo[i])ans--,size[w]--;

if (t<=w)

if (b[w-1]==a[i])

else

}x1=0;

x4=0;

x2=0;

x3=0;

fo(i,1,n)

if (a[i]>x1)

else

if (a[i]==x1)x4++;

else

if (a[i]>x2)x2=a[i],x3=1;

else

if (a[i]==x2)x3++;

if (x4>1) ans-=(ll)x4*(x4-1)/2;

else ans-=x3;

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

}}

JZOJ4848 永恆的契約

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

JZOJ4848 永恆的契約(單調棧)

有 n nn 塊石頭,排成乙個環,第 i ii 塊石頭為高度 a ia i ai 兩塊不同的石頭 i ii 和 j jj 能夠互相看到,當且僅當它們在環上的兩條路徑中有至少一條路徑上的石頭高度都不大於 min min min 求有多少對石頭能互相看到。1 n 106 1 a i 10 91 leq ...

永恆的契約

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