第一問不解釋,對於第二問的處理,可以使用cdq分治,假設分治的詢問區間是[l,r],那麼我們對於標號在[l,mid]的修改操作賦予乙個權值,因為在當前[l,r]中[l,mid]的修改操作只會對[mid+1,r]的詢問操作,所以第i修改操作至少經過m-i的時間,因此賦予的權值是m-i,而對於[mid+1,r]區間中的詢問操作,也賦予乙個權值w-m,這裡w為詢問的數值,我們可以預處理出樹的dfs序並維護乙個樹狀陣列,這樣我們就可以把這些操作按權值從大到小插入或者詢問,時間複雜度o(nlognlogn)。
**,執行時間差不多墊底。。(看了其他博主的題解貌似我想的複雜了。。。)
1 #include2 #include3#define n 500010
4#define lb(x) (x&-x)
5using
namespace
std;
6int
dp,p[n],pre[n],tt[n],n,a,i,m,o,c[n],deep[n],fa[n];
7int
l[n],r[n],ans[n];
8int s[n][20];9
struct
gb[n];
12struct
ggw[n];
15void cc(int x,int
w)1622}
23void dfs(int
x)24
34 r[x]=++o;35}
36int lca(int x,int
y)3746}
47if(x==y)return
x;48
for(i=19;i>=0;i--)
4955}56
return
fa[x];57}
58int sum(int
x)59
66return
ans;67}
68void link(int x,int
y)69
72bool
cmp(gg a,gg b)
7378
void solve(int l,int
r)79
89for (i=m+1;i<=r;i++)
90if (b[i].typ==1)91
95 sort(w+1,w+1+tot,cmp);
9697
for (i=1;i<=tot;i++)
98if (w[i].id<=m)
99103
else
104110
for (i=1;i<=tot;i++)
111if (w[i].id<=m)
112116
117 solve(l,m);solve(m+1
,r);
118}
119120
intmain()
121128 scanf("
%d",&m);
129for (i=1;i<=m;i++)
130136 dfs(1
);137
for(i=1;i<=n;i++)s[i][0]=fa[i];
138for(int h=1;h<20;h++)
139144
}145 solve(1
,m);
146for (i=1;i<=m;i++)
147if (b[i].typ==1
)148
153 }
bzoj 4448 Scoi2015 情報傳遞
description 奈特公司是乙個巨大的情報公司,它有著龐大的情報網路。情報網路中共有n名情報員。每名情報員口j 能有 若t名 可能沒有 下線,除1名大頭日外其餘n 1名情報員有且僅有1名上線。奈特公司紀律森嚴,每 名情報員只能與自己的上 下線聯絡,同時,情報網路中仟意兩名情報員一定能夠通過情報...
BZOJ4448 Scoi2015 情報傳遞
bzoj4448 scoi2015 情報傳遞 奈特公司是乙個巨大的情報公司,它有著龐大的情報網路。情報網路中共有n名情報員。每名情報員口j 能有若t名 可能沒有 下線,除1名大頭日外其餘n 1名情報員有且僅有1名上線。奈特公司紀律森嚴,每名情報員只能與自己的上 下線聯絡,同時,情報網路中仟意兩名情報...
BZOJ 4448 Scoi2015 情報傳遞
bzoj 4448 scoi2015 情報傳遞 主席樹 奈特公司是乙個巨大的情報公司,它有著龐大的情報網路。情報網路中共有n名情報員。每名情報員口j 能有 若t名 可能沒有 下線,除1名大頭日外其餘n 1名情報員有且僅有1名上線。奈特公司紀律森嚴,每 名情報員只能與自己的上 下線聯絡,同時,情報網路...