【递增三元组】

【递增三元组】_第1张图片

 

思路:

对b进行循环,判断有多少个比b小的a和多少个比b大的c

这样只过一遍就可以,不用再拐回去!!!

比如

排序后

a:1 4 5

b:5 5 9

c:4 6 7

b为5时,a是1,4,计数counta = 2;c是4,6,计数:c是从6往后的所有countc=2

b为5时

b为9时,a是5,计数counta=3;c是7的后一个,计数:countc=0

室友教会了怎么判断多少的复杂度能过:

一般不超过1e9,1e10就能过去,

如果数的范围是1e5,复杂度是n^2,那么差不多可以

如果数的范围是1e5,复杂度是n^3,就够呛了

#include 
#include
#include
#include
using namespace std;

const int N = 1e5+10;

int a[N],b[N],c[N],n;


int main(){
	
	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];
		
	long long  sum = 0;
	
	sort(a,a+n);
	sort(b,b+n);
	sort(c,c+n);	
	long long i = 0,j = 0,k = 0,ai = 0,ak = n;
	for(;j < n; j++){
		
		while(a[i]=c[k] && k< n){
			k++;
		}
		ak = n-k;
		sum = sum+ai*ak;
	}
	
	cout << sum;
	
	return 0;
}

/*

3
4 1 5
9 5 5
7 6 4

*/

你可能感兴趣的:(2022年初蓝桥杯练习,c++,蓝桥杯)