Problem - 1677A - Codeforces

时津风有一个长度为n的排列组合p。回顾一下,长度为n的排列组合p是由n个不同的整数组成的序列p1,p2,...,pn,每个整数从1到n(1≤pi≤n)。
她想知道在这个排列组合中,有多少个不同的指数图组[a,b,c,d](1≤a
pa
请注意,如果a1≠a2或b1≠b2或c1≠c2或d1≠d2,两个图元[a1,b1,c1,d1]被认为是不同的。
输入
第一行包含一个整数t(1≤t≤1000)--测试案例的数量。每个测试用例由两行组成。
第一行包含一个整数n(4≤n≤5000)--包络的长度p。
第二行包含n个整数p1,p2,...,pn(1≤pi≤n)--包络p。
保证所有测试案例的n之和不超过5000。
输出
对于每个测试案例,打印一个整数--不同的[a,b,c,d]图组的数量。
例子
输入复制
3
6
5 3 6 1 4 2
4
1 2 3 4
10
5 1 6 2 8 3 4 10 9 7
输出拷贝
3
0
28
注意
在第一个测试案例中,有3个不同的[a,b,c,d]图组。
p1=5, p2=3, p3=6, p4=1,其中p1
同样地,另外两个图元是[1,2,3,6],[2,3,5,6]。
题解:
我们可以枚举b,过程中,利用桶排的思想把对b前面的数标记,利用前缀和,找到,b后面的数c有多少个是大于a的res,然后在内部循环,c后面的数,找到大于当前b的加上,然后更新res,因为b后面的数可以成为d,也可以为c
(说的有点乱,具体代码有体现)
#include
#include
#include
#include
#include
下一篇:【表白程序】盛开的玫瑰代码