主页 > 互联网  > 

AcWing1236.递增三元组(蓝桥杯C++AB辅导课)

AcWing1236.递增三元组(蓝桥杯C++AB辅导课)

AcWing 1236. 递增三元组(蓝桥杯C++ AB辅导课)

题目传送门

#include<iostream> #include<algorithm> using namespace std; typedef long long ll; const int N = 1e5 + 10; int n; int a[N], b[N], c[N]; int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n; for (int i = 1; i <= n; i ++) cin >> a[i]; for (int i = 1; i <= n; i ++) cin >> b[i]; for (int i = 1; i <= n; i ++) cin >> c[i]; sort(a + 1, a + n + 1); sort(b + 1, b + n + 1); sort(c + 1, c + n + 1); ll ans = 0; for (int i = 1, indexA = 1, indexC = 1; i <= n; i ++) { int B = b[i]; while (indexA <= n && a[indexA] < B) { indexA ++; } while (indexC <= n && c[indexC] <= B) { indexC ++; } // 按照以下例子说明 /*1 3 5 4 4 6 5 7 8*/ // 当B指针指向4时,A指针进行比对当比对到元素5时, // 发现不符合A<B,所以跳过,但这里的A指针直到了 // 下标3位置,再转到C指针进行比对,但所有的元素 // 都大于4,符合B<C,所以可以匹配的递增三元组的 // 个数是ans = (3 - 1) * (3 - 1 + 1) = 6 // 以此类推,所有三元组的个数为ans = 6 + 6 + 6 = 18 ans += (ll)(indexA - 1) * (n - indexC + 1); } cout << ans <<endl; return 0; }
标签:

AcWing1236.递增三元组(蓝桥杯C++AB辅导课)由讯客互联互联网栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“AcWing1236.递增三元组(蓝桥杯C++AB辅导课)