#3327. 直线交叉

直线交叉

题目描述

在一个圆周上均匀分布着N个点,按顺时针方向依次标记为1,2,...,N。

圆周上有M条不同的直线,其中第i条直线穿过两个不同的点Ai和Bi(1≤i≤M)。

请计算满足以下条件的数对(i,j)的数量:1≤i<j≤M,且第i条直线与第j条直线相交。

输入格式

  • 第一行包含两个整数N和M,分别表示圆周上的点数和直线数量。
  • 接下来的M行,每行包含两个整数Ai和Bi,表示一条直线穿过的两个点。

约束条件

  • 2 ≤ N ≤ 1,000,000
  • 1 ≤ M ≤ 300,000
  • 1 ≤ Ai < Bi ≤ N(1≤i≤M)
  • 任意两条直线穿过的点对不完全相同(即(Ai,Bi) ≠ (Aj,Bj) (i≠j))
  • 所有输入值均为整数

输出格式

输出满足条件的数对数量。

样例

样例输入1

8 3
1 5
1 8
2 4

样例输出1

2

解释

圆周上有8个点和3条直线:

  • 第1条直线:连接点1和5
  • 第2条直线:连接点1和8
  • 第3条直线:连接点2和4

相交情况:

  • 第1条和第2条直线相交
  • 第1条和第3条直线不相交
  • 第2条和第3条直线相交

因此满足条件的数对有(1,2)和(2,3),输出2。


样例输入2

5 10
2 5
1 5
1 2
2 4
2 3
1 3
1 4
3 5
3 4
4 5

样例输出2

40

注意事项

  • 圆周上点的排列顺序为顺时针方向
  • 两条直线相交当且仅当它们的四个端点不是完全按顺序排列的(即一个线段的两个端点不完全包含在另一个线段的两个端点之间)