蓝桥杯_递增三元组#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的数的数组下标