orz zzd大神太強啦!
解:首先發現幾個性質:如果把區間還原到原序列上的話,可以發現這些區間要麼包含,要麼相離。不存在相交。
然後發現如果區間a包含區間b,那麼最後剩下來的人,a一定不小於b。又發現最優決策要麼是0,要麼是在某個極小的區間內。
然後我們發現這tm不就可以建出一棵樹來麼?列舉葉節點然後樹上倍增找到最多能勝場數,然後取max即可。
怎麼搞出原序列上的區間來呢?我先想到樹狀陣列(????),然後搞了乙個小時還不會定位區間,爆0了。
後來發現splay可以隨便水......
1 #include 2ac**3const
int n = 100010;4
5struct
edge edge[n << 1]; int
tp;8
9struct
node
15}node[n];
1617
inta[n], stk[n], top, root, n, m, k, e[n], pw[n], d[n], fa[n];
18int s[n][2], faa[n][20], siz[n], lc[n], rc[n], tot, st[n][20
];19
20 inline void add(int x, int
y) 27
28 inline void pushup(int
x) 33
34 inline void pushdown(int
x) 37
38 inline void rotate(int
x) 47 s[y][f] = s[x][!f];
48if(s[x][!f])
51 s[x][!f] =y;
52 fa[y] =x;
5354
pushup(y);
55return;56
}5758 inline void splay(int x, int g = 0
) 65
while
(top)
69 y =fa[x];
70int z =fa[y];
71while(y !=g)
76rotate(x);
77 y =fa[x];
78 z =fa[y];79}
80pushup(x);
81return;82
}8384 inline int np(int f, int l, int
r) 92
93 inline int getpbyr(int
k) 100
else
if(k == siz[s[p][0]] + 1
) 103
else
107}
108splay(p);
109return
p;110
}111
112int build(int f, int l, int
r) 116
int mid = (l + r) >> 1
;117
int x =np(f, mid, mid);
118if(l < mid) s[x][0] = build(x, l, mid - 1
);119
if(mid < r) s[x][1] = build(x, mid + 1
, r);
120pushup(x);
121return
x;122
}123
124 inline int getl(int p =root)
130return
p;131
}132
133 inline int getr(int p =root)
139return
p;140
}141
142 inline void merge(int x, int l, int
r) 149
150 inline void
prework()
154for(int i = 1; i < n; i++) st[i][0] =a[i];
155for(int j = 1; j <= pw[n]; j++)
159}
160return
;161
}162
163 inline void
prework2()
168}
169return
;170
}171
172 inline int getpos(int
x) 178 t--;
179}
180return
x;181
}182
183 inline int getmax(int x, int
y) 187
/*188
5 3 3
1891 0 2 4
1901 3
1910 1
1920 1
193*/
194int
main()
200for(int i = 1; i <= m; i++)
205///
input over
206207
prework();
208 root = build(0, 0, n + 1
);209
210for(int i = 1; i <= m; i++)
222223 std::sort(node + 1, node + m + 1
);224 top = 0
;225
for(int i = 1; i <= m; i++)
229if
(top)
233 stk[++top] =i;
234}
235236
prework2();
237for(int i = 1; i <= m; i++)
240241
int ans = 0, pos = 1
;242
for(int x = 1; x <= m; x++)
250else
if(t ==ans)
253}
254255 printf("
%d\n
", pos - 1
);256
return0;
257 }
票付通「旺季分流指揮官」坐鎮2019雲南旅交會
11 月 15 日至 17 日 2019 中國國際旅遊交易會在雲南昆明滇池國際會展中心隆重舉行。自 1998 年創辦以來,旅交會已成功舉辦20 屆,發展為亞洲地區最大 影響最為廣泛的專業旅遊展會。本屆交易會共設立 5 個展館,總面積 5 萬平方公尺,廣邀世界各地以及中國31 個省 自治區 直轄市 港...
大道至簡 企業需要的中颱是什麼?答案是 指揮官體系
直接講觀點,我認為 中臺 概念沒有反應這件事情的本質,我希望把它命名為 指揮官體系 企業需要的是指揮官體系,大家熱議的中颱的本質對於企業而言真正需要的其實是指揮官體系。從今天開始,忘記 中臺 記住 指揮官體系 這五個字。2019年在it圈裡對於中颱的討論絕對是最熱的話題之一。對於各個企業來說,看著別...
面試官都在問 Linux命令之許可權理解
0.概述 1.linux命令之切換使用者 su 全程 switch user 1.1 簡述 作業系統中,並不能讓乙個使用者可以為所欲為,這樣會使得系統的安全性無法得到保障,因此有了操作許可權的劃分,在linux系統中使用者共劃分為兩類 管理員使用者 root 以及 普通使用者 su命令可讓乙個普通使...