JZOJ3864 JSOI2014 歌劇表演

2021-07-26 05:31:02 字數 889 閱讀 8630

我們想想乙個人在什麼情況下會被發現:我們給每個數標上乙個識別號,相同的識別號代表這兩個數性質相同無法識別,而當乙個數擁有乙個唯一的識別號時,該數就可以被識別。為了不讓識別號混亂,又要讓區間的數的識別號的相對位置不變,我們每次取1~n中的最大值t,每次區間中若遇到乙個新出現的識別號,我們就用t+1給它新標號,且t++,這樣就保證了區間以外的數不會擁有和區間內的數一樣的識別號。

那麼,怎樣判斷乙個點在什麼時候被識別呢?

我們可兩邊以打個模擬鍊錶(c++選手可以打set),識別號相同的點連成一條鏈。當乙個點的左右分別為0,n+1時這個點即可被識別。(注意:這個被識別的點可以再區間中的也可在區間外)

#include

#include

#include

#include

#include

#define ll long long

using namespace std;

const ll maxn=100005;

ll a[maxn],n,m,i,t,j,k,z,num,bz[maxn],b[maxn],c[maxn],l[maxn],r[maxn],h[maxn][2],x,d[maxn],f[maxn],y;

int main()

for (j=1;j<=num;j++)

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

printf("%lld ",bz[i]);printf("\n");

}

JSOI2014 歌劇表演

傳送門 沒想到吧我半夜切的 這道題應該算是 text 裡面比較簡單的吧。考慮用集合關係來表示分辨關係,具體地說就是我們把所有演員分成若干個集合,滿足同乙個集合內的演員兩兩不能分辨。初始時所有演員位於同乙個集合內。然後對於某次參加了演出的演員,他們可能分別來自不同的集合,那麼這些集合就會有兩類不同的組...

JSOI2014 歌劇表演

我們抽象的認為一些不能互相辨認的人,被分到了乙個集合,每當又有一場演出,就將每個出演的演員扔出集合,再將上次在相同集合的分在同一集合。然後修改被分的集合和被新建立的時間,當集合只有乙個數的時候不可再分。輸出每個演員所在的集合的最後修改時間,僅當該演員所在的集合中只有乙個演員。include incl...

題解 JSOI2014 歌劇表演

我們可以把這些人拆成一些集合,保證對於乙個集合你只知道這個整體,而無法分辨出哪一部分是哪些人 起初所有人都在乙個集合中 我們對於每一次操作,肯定會有一些人屬於同乙個集合 那你就可以從這個集合中分辨出這些人來,把這些人摳出來重新丟進乙個集合 最後乙個人乙個集合的就可以被分辨出來 include inc...