1<=n<=2e6,時限:2.5s
容斥原理瞎搞。
設a,b,c分別為滿足三個條件的集合。
根據容斥原理,有: a∪
b∪c=
a+b+
c−a∩
b−a∩
c−b∩
c+a∩
b∩c
而a∪b∪c同時會等同於總數n∗
(n−1
) -都大於的個數(即都小於的個數a∩
b∩c )
所以: n∗
(n−1
)−a∩
b∩c=
a+b+
c−a∩
b−a∩
c−b∩
c+a∩
b∩c
2∗a∩
b∩c=
n∗(n
−1)−
a−b−
c+a∩
b+a∩
c+b∩
c a
=b=c
=n∗(
n−1)
/2
所以: 2∗
a∩b∩
c=a∩
b+a∩
c+b∩
c−n∗
(n−1
)/2
a∩b∩
c=a∩
b+a∩
c+b∩
c−n∗
(n−1
)/22
求a∩b+a
∩c+b
∩c可以直接用樹狀陣列搞三次,常數小。
code:
#include
#include
#include
#define ll long long
#define fo(i, x, y) for(int i = x; i <= y; i ++)
#define low(a) ((a) & -(a))
using
namespace
std;
const
int n = 2e6 + 5;
int a[3][n], n;
ll seed;
ll rand()
void gen(int *a)
ll ans;
int f[n], z[n];
void gao(int p, int q)
}int main()
清華集訓2017模擬 ces
首先把用tajan把橋邊全部找出來,橋邊會把圖分成若干個雙聯通分量。把每個雙聯通分量並成乙個點,橋邊作為邊,這會構成一棵樹。顯然,對於每個詢問加k條邊最多能去掉多少條橋邊,就是用k條簡單路徑去覆蓋這棵樹,最多能覆蓋多少條邊。有乙個很優的貪心,把k按1 q做,每次找到樹的直徑,答案加上直徑的長度,把直...
清華集訓2017模擬12 09 塔
有乙個塔,他的名字叫做粽粑,粽粑的每一層都有乙個顏色 粽粑非常厲害,它在吸收天地精華之後會長高.粽粑的長高方式有兩種 1.在塔頂長出一層.2.在塔底長出一層,即原來的第一層變成第二層,第二層變成第三層,以此類推,新長出來的是第一層.粽粑有可能在某個時刻不是很開心,這個時候它會撤銷它的前若干次長高.你...
清華集訓2017模擬12 09 塔
有乙個塔,他的名字叫做粽粑,粽粑的每一層都有乙個顏色 粽粑非常厲害,它在吸收天地精華之後會長高.粽粑的長高方式有兩種 1.在塔頂長出一層.2.在塔底長出一層,即原來的第一層變成第二層,第二層變成第三層,以此類推,新長出來的是第一層.粽粑有可能在某個時刻不是很開心,這個時候它會撤銷它的前若干次長高.你...