[蓝桥杯 2018 省 B] 递增三元组
题目描述
给定三个整数数组 $A = [A_1, A_2,\cdots, A_N]$,$B = [B_1, B_2,\cdots, B_N]$,$C = [C_1, C_2,\cdots,C_N]$。
请你统计有多少个三元组 $(i, j, k)$ 满足:
- $1 \le i, j, k \le N$
- $A_i < B_j < C_k$
输入格式
第一行包含一个整数 $N$。
第二行包含 $N$ 个整数 $ A_1, A_2,\cdots, A_N$。
第三行包含 $N$ 个整数 $ B_1, B_2,\cdots, B_N$。
第四行包含 $N$ 个整数 $ C_1, C_2,\cdots, C_N$。
输出格式
一个整数表示答案
样例 #1
样例输入 #1
3
1 1 1
2 2 2
3 3 3
样例输出 #1
27
#include <iostream>
#include <algorithm>
using namespace std;
int a[100000];
int b[100000];
int c[100000];
int check1(int x,int y)
{
int left=0;
int right=y;
int ret=0;
while(left<=right)
{
int mid=(left+right)/2;
if(b[mid]>a[x])
{
ret=mid;
mid=right-1;
}
if(b[mid]<a[x])
{
mid=left+1;
}
}
return ret;
}
int check2(int x,int y)
{
int left=0;
int right=y;
int ret=0;
while(left<=right)
{
int mid=(left+right)/2;
if(c[mid]>b[x])
{
ret=mid;
mid=right-1;
}
if(c[mid]<b[x])
{
mid=left+1;
}
}
return ret;
}
int main()
{
int n;
cin>>n;
int ans=0;
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];
}
sort(a,a+n);
sort(b,b+n);
sort(c,c+n);
for(int i=0;i<n;i++)
{
int j=check1(i,n);
for(;j<n;j++)
{
int z=check2(j,n);
for(;z<n;z++)
{
if(c[z]>b[j])
{
ans=ans+1;
}
}
}
}
cout<<ans;
return 0;
}
这段代码运行不了,请指教哪里出错