祭典即將舉行,編織結繩的工作正在緊張地開展著。而這天,瀧和三葉交換了身體,三葉擔心瀧不會編結繩,在日記裡留下了編織結繩的方法,並請你來幫助瀧編好結繩。
將絲線匯集在一起,編織成形;扭曲,纏繞,有時又還原,再連線;那就是結,那就是時間。
現在瀧要編織由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併入乙個集合之中。
再最後搜尋答案的時候,只需要把同乙個集合中,時間最晚的那一次修改作為集合的顏色即可
#includeusingnamespace
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
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...