蓝桥杯 递增三元组

image

可以先对三个数组排序,然后遍历数组b,查找a数组中有多少个小于b[i]的,c数组中有多少个大于b[i]的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include<iostream>
#include<algorithm>
#include<cstdio>
#define MAX 100000
using namespace std;
int a[MAX],b[MAX],c[MAX];
int main(){
int n;
cin>>n;

for(int i=0;i<n;i++)
cin>>a[i];
for(int i=0;i<n;i++)
cin>>b[i];
for(int i=0;i<n;i++)
cin>>c[i];
int sum=0;
for(int j=0;j<n;j++){
int m1=(upper_bound(a,a+n,b[j])-a);
int m2=n-(lower_bound(c,c+n,b[j])-c);
sum+=m1*m2;
}

cout<<sum<<endl;
}