大佬的難題

2022-05-11 12:03:03 字數 2251 閱讀 8256

大意:

給你 3 個長度為 n 的排列 , , , 求

∑[a x < a y ][b x < b y ][c x < c y ], n ≤ 10 5

1≤x,y≤n

題解:

直接容斥,設sx,y表示滿足上述式子的數量 答案即為sx,y==3

容易發現sx,y只能取2,3

設pa,b 為a,b兩個陣列滿足[ax

然後顯然pa,b+pb,c+pa,c=3*sx,y==3 + sx,y==2

2sx,y=pab+pbc+pac-n*(n-1)>>1

1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7

using

namespace

std;

8 typedef long

long

ll;9

const

int n=2e6;

10int

n;11

inta[n],b[n],c[n];

12long

long

seed;

13long

long

rand()

16void gen(int *a)

20struct

node

23}tmp[n];

24int tree[n*4

];25

void add(int

sta)

28int getsum(int

sta)

33 ll solve(int *a,int *b);

36 sort(tmp+1,tmp+n+1

);37

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

41 memset(tree,0,sizeof

(tree));

42return

ans;43}

44int

main()

45

另外就是60的cdq 很好想:

以a先排個序,然後就是b,c的二維選點,cdq nlog2n玩過

1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7

using

namespace

std;

8 typedef long

long

ll;9

const

int n=500005

;10 ll seed,ans=0;int

a[n],b[n],c[n],n;

11ll rand()

14void gen(int *a)

18struct

nodeq[n];

21bool comp(const node &p,const node &pp)

22int tree[n<<1

];23

void add(int sta,int

ad)26

int getsum(int

sta)

31bool

check(node px,node qx)

35node tmp[n];

36void cdq(int l,int

r)46

else50}

51while(xl<=mid)

55while(xr<=r)

59for(int i=1;i<=m;i++)63}

64void

luang()

6569 sort(q+1,q+n+1

,comp);

70 cdq(1

,n);

71 printf("

%lld\n

",ans);72}

73void

work()

7481

82int

main()

83

大佬的難題

給n個三維座標點,滿足每維座標都是1 n的排列,求三維偏序。注意到任意兩個位置,都有乙個位置有至少兩維比另乙個位置的對應兩維大,於是可以容斥,那麼只需要做二維偏序。include include define fo i,a,b for i a i b i using namespace std ty...

CDUTCM 1216任大佬的數學難題

ps 這道題卡了很久,到最後都沒有ac,題意很清楚明了,認真分析一下就可以發現就是乙個公式c k,m a的 k m 次方乘以b的m次方,但由於k,n,m都很大,所以求c k,m 時不能用常規的取模運算,具體為什麼點這裡,大佬講的很詳細,除法不能取模,所以就要用乘法逆元,具體我也不是很懂,記住要這樣用...

清華集訓2017模擬12 10 大佬的難題

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 ...