蓝桥杯_递增三元组
#include<bits/stdc++.h>
using namespace std;
const int MAXN = 100005;
int a[MAXN],b[MAXN],c[MAXN];
int n,sum;
int main()
{
cin>>n;//0~3
for(int i=0;i<n;i++)scanf("%d",&a[i]);
for(int i=0;i<n;i++)scanf("%d",&b[i]);
for(int i=0;i<n;i++)scanf("%d",&c[i]);
sort(a,a+n);
sort(b,b+n);
sort(c,c+n);
sum = 0;
for(int i=0;i<n;i++){//0~3
int x = (lower_bound(a,a+n,b[i]) - a);//最右端
int y = (n- (upper_bound(c,c+n,b[i]) - c));//最左端
sum += x*y;
cout << "x:"<<x<<"y:"<<y << endl;
}
cout<<sum;
return 0;
}
lower_bound(a,a+n,x)-a;是返回第一个大于等于x 的数 的数组下标,如果没有找到就返回,遍历区间最大下标的下一个下标(是,的确越界了,但是,人家只是指向,并没有访问,有问题吗?没有问题!)(在这个例子中指n)。
upper_bound(c,c+n,x)-c;是返回第一个大于x的数的数组下标