排序+二分
处理边界问题,比较花时间
#include <iostream>
#include <algorithm>
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 5e5 + 10;
int a[N],b[N],c[N];
int n;
int main(){
scanf("%d",&n);
for(int i = 0; i < n; i++){
scanf("%d",&a[i]);
}
sort(a,a + n);
for(int i = 0; i < n; i++){
scanf("%d",&b[i]);
}
sort(b,b + n);
for(int i = 0; i < n; i++){
scanf("%d",&c[i]);
}
sort(c,c + n);
ll ans = 0;
// if((c[0] > b[n-1]) && (b[0] > a[n-1])){
// ans = (1ll)*(n * n)*(1ll) * n;
// printf("%lld\n",ans);
// return 0;
// }//本以为这是优化代码,没想到是阻碍我ac的代码。。。泪
for(int i = 0; i < n; i++){
int al = 0, ar = n - 1;
while(al < ar){
int mid = (al + ar)/2;
if(b[i] > a[mid]) al = mid + 1;
else ar = mid;
}
if(a[al] >= b[i]) ar = ar;
else ar = ar + 1;
int cl = 0, cr = n - 1;
while(cl < cr){
int mid = (cl + cr + 1) / 2;
if(b[i] < c[mid]) cr = mid - 1;
else cl = mid;
}
// cout << "cl = " << cl <<"cr = " << cr << endl;
if(b[i] < c[cl]) cl = (n - cl);
else cl = (n - 1 - cl);
ans += (1ll) * ar * cl;
}
//for(int i = n - 1; i >= 0; i--){//c数组
// for(int j = n-1; j >= 0; j--){//b数组
// if(c[i] > b[j]){
// int k = n - 1;
// for(k = n - 1; k >= 0; k--){//a数组
// if(b[j] > a[k]){
// break;
// }
// }
// ans +=(1ll) * (k + 1);
// }
// }
// }
printf("%lld\n",ans);
// cout << ans << endl;
return 0;
}
暴力版(只能过部分样例)
#include <iostream>
#include <algorithm>
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e5 + 10;
int a[N],b[N],c[N];
int n;
int main(){
scanf("%d",&n);
for(int i = 0; i < n; i++){
scanf("%d",&a[i]);
}
sort(a,a + n);
for(int i = 0; i < n; i++){
scanf("%d",&b[i]);
}
sort(b,b + n);
for(int i = 0; i < n; i++){
scanf("%d",&c[i]);
}
sort(c,c + n);
ll ans = 0;
if((c[0] > b[n-1]) && (b[0] > a[n-1])){
ans = (1ll)*(n * n)*(1ll) * n;
printf("%lld\n",ans);
return 0;
}
for(int i = n - 1; i >= 0; i--){//c数组
for(int j = n-1; j >= 0; j--){//b数组
if(c[i] > b[j]){
int k = n - 1;
for(k = n - 1; k >= 0; k--){//a数组
if(b[j] > a[k]){
break;
}
}
ans +=(1ll) * (k + 1);
}
}
}
printf("%lld\n",ans);
// cout << ans << endl;
return 0;
}