2020牛客暑期多校訓練營(第八場)

2022-08-05 11:45:16 字數 2028 閱讀 2810

並查集+樹狀陣列離散化

要點一、由於題目中給出的對於a陣列的資料範圍在1~1e9,直接利用陣列是不現實的,所以我們用陣列a下標開陣列,這個範圍是1~1e5,開陣列是能夠接受的。

要點二、之前讀取的資料存在重複,則需要對其進行去重操作。

要點三、查詢連通塊,如果是,輸出連通塊中的節點個數;否則節點數減一。

#include #define t int t ;cin >> t;while(t--)

using

namespace

std ;

typedef

long

long

ll;const

int maxn = 2e5 + 10

;ll vis[maxn],a[maxn],b[maxn],c[maxn],pre[maxn];

//vis陣列表示的是當前的節點是否被訪問過

//pre陣列表示的是合併路徑

inline ll find(ll x)

inline

void

merge(ll u,ll v)

pre[x]=y;//

表示x,y的祖宗合併,即兩者為同一祖先

if(vis[x])vis[y]=1;//

該節點表示已被訪問

}int

main()

for(ll i=0; i<=maxn; i++)//

初始化操作

sort(c+1,c+tot+1);//

升序排序,便於接下來的去重

int cnt=unique(c+1,c+tot+1)-(c+1);//

去重,方便編號

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

int ans=tot;

for(ll i=1; i<=tot; i++)

cout

<<"

case #

"<": "

}}

題意:第一天的人數就是最多人數,目標是為了獲得利潤最大化,期間不得中斷,不管第一天是不是負利潤的,則會酒店會繼續運營下去,且必須全部賣出,如果之後某一天遇到負利潤只取一份菜,接下去最多隻能取一份菜,直到利潤最大。

要點:字首和,在每個**讀入後,均計算其字首和

注意點:輸出的資料型別要麼採用__int128或者是long double,否則會wa

#include#define inf 0x3f3f3f3f

#define n 50050

using

namespace

std;

typedef

long

long

ll;const ll maxn=1e5+5

;template

inline void read(_tp&x);

inline

void

print(__int128 x);

template

inline void read(_tp&x)

inline

void

print(__int128 x)

if(x>9) print(x/10

); putchar(x%10+'0'

);}ll a[maxn],b[maxn];

intmain()

scanf(

"%lld

",&b[0

]);

for(ll j=1; j)

long

double max1=a[0

];

long

double max_profit=0

; b[n]=0

; a[n]=a[n-1

];

for(ll j=1; j<=n; j++)

printf(

"case #%lld: %lld %.0lf\n

",i,b[0

],max_profit);

}}

2020牛客暑期多校訓練營(第八場)

目錄傳送門 solvedab cdef ghij k5 11o o o o o對時間分治,線段樹維護可撤銷並查集的模板題。 這樣可以直接維護...

2019牛客暑期多校訓練營(第八場)

practice link solvedab cdef ghij k4 11 o ooa all one matrices 點這裡》 b beauty values 點這裡》 c cdma 構造 題意 構造由 1,1組成的m m矩陣,使得任意兩個不同 這裡指的是數字有不同的地方 的行對應位置乘積和為...

2019牛客暑期多校訓練營(第八場

solved by rdc 84min 2 做法 題意構造矩陣,使得任意兩行點積為 0 做法樣例具有很強的暗示性,我們可以用 k 階矩陣,構造 k 1 階矩陣。 題意三維空間,插入點, 查詢與某個點曼哈頓距離最小點。 比賽中做法 做法2 0 做法 upsolved 問題的轉化 注意到標號為 x 的點...