蒟蒻求各位判断一下时间复杂性。Thanks♪(・ω・)ノ(必关)
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
int a[100005],b[100005],c[100005];
int small(int n,int a[],int key)
{
int left=1,right=n;
while(left<right)
{
int mid=(left+right+1)/2;
if(a[mid]<key)
left=mid;
else
right =mid-1;
}
return left;
}
int big(int n,int c[],int key)
{
int left=1,right=n;
while(left<right)
{
int mid=(left+right)/2;
if(c[mid]>key)
right=mid;
else
left =mid+1;
}
return left;
}
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;++i)
cin>>a[i];
for(int i=1;i<=n;++i)
cin>>b[i];
for(int i=1;i<=n;++i)
cin>>c[i];
sort(a+1,a+n+1);
sort(b+1,b+n+1);
sort(c+1,c+n+1);
LL count =0;
for(int i=1;i<=n;i++)
{
int key=b[i];
LL wa=small(n,a,key);
LL wc=big(n,c,key);
if(a[wa]<key&&c[wc]>key)
count+=wa*(n+1-wc);
}
cout<<count<<endl;
}