洛谷比賽 你的名字T1 線索

2022-05-12 05:05:13 字數 2461 閱讀 8446

祭典即將舉行,編織結繩的工作正在緊張地開展著。而這天,瀧和三葉交換了身體,三葉擔心瀧不會編結繩,在日記裡留下了編織結繩的方法,並請你來幫助瀧編好結繩。

將絲線匯集在一起,編織成形;扭曲,纏繞,有時又還原,再連線;那就是結,那就是時間。

現在瀧要編織由n條絲線組成的結繩。這nn條結繩緊緊排成一排,按位置把它們叫作第1,2,⋯,n條絲線。編織開始前,每條絲線有自己的顏色(用乙個正整數來表示),第i(1≤i≤n)條絲線顏色為ci​。

三葉給瀧的編織方法有m步,第j(1≤j≤m)步用44個正整數aj​,lj​,rj​,xj​來描述。

aj​的值為1或2。

若aj​=1,則表示這步操作為染色,這時要把[lj,rj​]這個區間上的絲線全部染成xj​這種顏色,保證lj​≤rj​。

若aj​=2,則表示這步操作為交換,這時要把lj​位置上的絲線和rj​位置上的絲線交換。作為它們交換的紀念,交換的同時要把這兩條絲線染成xj​這種顏色。注意,aj​=2時不保證lj​≤rj​,但保證lj​≠rj​。

兩條絲線交換後會形成永久的聯絡。這種聯絡體現在,交換發生後,若其中任意一條絲線被染上了某種顏色,另一條絲線也會被同時染上相同的顏色。這種羈絆還具有傳遞性,即如果1與2建立了羈絆,2又3建立了羈絆,那麼我們就認為1也與3建立了羈絆。注意,絲線不能與自己形成結。

注意,如果交換的兩根絲線在交換前已經建立了聯絡,進行交換操作後它們的聯絡不會改變,但仍要對它們染色以示紀念。

為了檢查編織的效果,瀧想知道編織完畢後,每乙個位置上絲線的顏色。此外,為了保證結繩的聯絡足夠牢固,瀧還需要知道與每條絲線建立聯絡的絲線的數目。你能幫助他嗎?

輸入格式:

輸入共(m+2)行。

第1行有2個以空格分隔的正整數n,m,分別代表絲線的數目和編織步驟的數目。

第2行有n個以空格分隔的正整數,第i個正整數ci​表示編織開始前第i條絲線的顏色。

以下m行每行有4個以空格分隔的正整數aj​,lj​,rj​,xj​,描述編織的步驟,意義如上所述。

輸出格式:

輸出共2行。

第1行有n個以空格分隔的正整數,第ii個正整數ci′​代表編織完畢後第ii個位置上的絲線的顏色。

第2行有n個以空格分隔的非負整數,第ii個非負整數di​代表編織完畢後與第ii個位置上的絲線建立聯絡的絲線數目。

作為t1,就考了乙個不裸的線段樹,我覺得還是有點恐怖了。然而我似乎是忽略了題目順序是按劇情來的...

但是也能一眼看出來是線段樹+並查集,但是具體怎麼實現呢?

我們把時間作為lazy標記,時間大的顏色會覆蓋時間小的顏色,所以我們不需要完全更新每個區間。

對於乙個區間[l,r],直接區間修改[l,r]

對於乙個交換操作,只更新l的顏色,並把l和r併入乙個集合之中。

再最後搜尋答案的時候,只需要把同乙個集合中,時間最晚的那一次修改作為集合的顏色即可

#includeusing

namespace

std;

#define n 100100

#define ll long long

#define lc (p<<1)

#define rc (p<<1|1)

#define mid (t[p].l+t[p].r>>1)

intn,m;

intfa[n],col[n],bel[n],siz[n],colt[n];

struct

email

t[n*4

];inline

int find(int

x)void pushnow(int p,int

v)void pushdown(intp)}

void update(int p,int ql,int qr,int color,int

nowt)

pushdown(p);

if(ql<=mid)update(lc,ql,qr,color,nowt);

if(qr>mid)update(rc,ql,qr,color,nowt);

}void build(int p,int l,int

r)

int bm=l+r>>1

; build(lc,l,mid);build(rc,mid+1

,r);

}void query(int

p)

return

; }

pushdown(p);

query(lc);query(rc);

}int

main()

}query(1);

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

printf(

"%d

",col[bel[i]]);

printf("\n

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

printf(

"%d

",siz[bel[i]]-1

);

return0;

}

洛谷比賽 你的名字 T2日常

瀧打工的餐廳正在舉行擺盤大賽,你能幫助瀧拿到盡量高的獎金嗎?瀧拿到獎金後會請三葉和你喝咖啡的!餐廳提供了n個盤子,分別編號為n1,2,n。把它們排成一行,排好後第 1 i n 個盤子的編號為a ai 此時稱序列a1 a2 an 為一種擺法,也就是說每一種擺法恰為1 n的乙個排列。如3個盤子的不同擺法...

洛谷 比賽題解

這套題的題目質量很高,寫一發題解。t1 cjwssb最近在物理學科上遇到了難題,他不會計算乙個電路中的總電阻,現在他找到了你,希望你能幫助他。這個電路有如下限定 1 電路只由導線以及電阻為一歐的電阻組成 2 保證電路從左到右連線,即每個電阻或導線的兩個連線點xy保證x 我們可以用dfs求解,這個電路...

洛谷比賽日記

好不容易參箇賽才做幾個小時 只做了前4題,後面5題直接空著其實只是刷刷水題 工廠,模擬題 一開始zz想了半天怎麼貪心,差點去寫搜尋,最後突然發現只能按序放 秒之 一開始沒注意規模wa了,改了long long就a了 不知道為什麼有人t掉,無法理解 1 include 2 intmain 317 an...