....最后想到了,可是不应该枚举a[],这样要二重循环,而应该枚举b[],这样只需一重循环。。。
1 #include2 #include 3 #include 4 #include 5 using namespace std; 6 typedef long long ll; 7 const int maxn=1e5+10; 8 int a[maxn],b[maxn],c[maxn]; 9 int n;10 11 int FindLastSmaller(int key)12 {13 int l=0,r=n-1;14 while(l<=r){15 int mid=(l+r)>>1;16 if(a[mid]>=key) r=mid-1;17 else l=mid+1;18 }19 return r;20 }21 22 int FindFirstLarger(int key)23 {24 int l=0,r=n-1;25 while(l<=r){26 int mid=(l+r)>>1;27 if(c[mid]>key) r=mid-1;28 else l=mid+1;29 }30 return l;31 }32 33 int main()34 {35 cin>>n;36 for(int i=0;i >a[i];37 for(int i=0;i >b[i];38 for(int i=0;i >c[i];39 sort(a,a+n);40 sort(b,b+n);41 sort(c,c+n);42 ll ans=0;43 for(int i=0;i
lower_bound(),upper_bounder()不能再好用。。。
1 #include2 #include 3 #include 4 #include 5 using namespace std; 6 typedef long long ll; 7 const int maxn = 1e5 + 1000; 8 int a[maxn], b[maxn], c[maxn]; 9 int n;10 11 int main()12 {13 scanf("%d", &n);14 for (int i = 0; i < n; i++) scanf("%d", &a[i]);15 for (int i = 0; i < n; i++) scanf("%d", &b[i]);16 for (int i = 0; i < n; i++) scanf("%d", &c[i]);17 sort(a, a + n);18 sort(b, b + n);19 sort(c, c + n);20 ll ans = 0;21 for (int i = 0; i