题目描述
LYK有 $n$ 个小朋友排成一排。第 $i$ 个小朋友的战斗力是 $ a_i $,且他们的战斗力互不相同。
战斗力高的会打败战斗力低的。
LYK想恶搞这些小朋友们,具体地,它有 $k$ 次操作。
第i次操作会有两个参数 $l_i$ 和 $r_i$ ,表示如果两个小朋友A,B的战斗力均在 $[l_i,r_i]$ 这段区间中,它们的打架结果会相反。即如果一开始A能赢B,则现在变成B能赢A。当然它们的打架结果可能在后来的操作中又被反过来。
LYK想知道,m次操作后,存在多少三元组(a,b,c),其中a能赢b,b能赢c,c能赢a。注意这里(a,b,c),(b,c,a),(c,a,b)算同一种三元组。
输入
第一行两个数n,k。
第二行n个数表示 $a_i$。
接下来m行,每行两个数 $l_i,r_i$。
输出
一个数表示答案。
样例输入
3 2
1 2 3
1 2
2 3
样例输出
1
样例解释
进行过操作后,1能赢2,2能赢3,而3一开始就能赢1并且结果没被改变过,所以就存在1个符合条件的三元组。
数据范围
对于20%的数据 $n,k \le 100$
对于60%的数据 $n,k \le 1000$
对于另外10%的数据 $ k=0 $
对于100%的数据,$ 3 \le n \le 10^5,0 \le k \le 10^5,0 \le a_i,l_i,r_i \le 10^9,li \le ri $
呃…….这个题……你们先看一眼代码再决定要不要继续看吧 $QwQ$
这个题是标准的大毒瘤数据结构,在图上建线段树再从线段树上统计三元环
这就是一句话做法……
1 |
|