首页 > 其他分享 >[蓝桥杯 2018 省 B] 递增三元组(两种解法)

[蓝桥杯 2018 省 B] 递增三元组(两种解法)

时间:2024-07-17 15:00:33浏览次数:9  
标签:sort le int long 三元组 蓝桥 cdots 2018 100

[蓝桥杯 2018 省 B] 递增三元组

题目描述

给定三个整数数组 A = [ A 1 , A 2 , ⋯   , A N ] A = [A_1, A_2,\cdots, A_N] A=[A1​,A2​,⋯,AN​], B = [ B 1 , B 2 , ⋯   , B N ] B = [B_1, B_2,\cdots, B_N] B=[B1​,B2​,⋯,BN​], C = [ C 1 , C 2 , ⋯   , C N ] C = [C_1, C_2,\cdots,C_N] C=[C1​,C2​,⋯,CN​]。

请你统计有多少个三元组 ( i , j , k ) (i, j, k) (i,j,k) 满足:

  1. 1 ≤ i , j , k ≤ N 1 \le i, j, k \le N 1≤i,j,k≤N
  2. A i < B j < C k A_i < B_j < C_k Ai​<Bj​<Ck​

输入格式

第一行包含一个整数 N N N。

第二行包含 N N N 个整数 $ A_1, A_2,\cdots, A_N$。

第三行包含 N N N 个整数 $ B_1, B_2,\cdots, B_N$。

第四行包含 N N N 个整数 $ C_1, C_2,\cdots, C_N$。

输出格式

一个整数表示答案

样例 #1

样例输入 #1

3
1 1 1
2 2 2
3 3 3

样例输出 #1

27

提示

对于 30 % 30\% 30% 的数据, 1 ≤ N ≤ 100 1 \le N \le 100 1≤N≤100。

对于 60 % 60\% 60% 的数据, 1 ≤ N ≤ 1000 1 \le N \le 1000 1≤N≤1000。

对于 100 % 100\% 100% 的数据, 1 ≤ N ≤ 1 0 5 1 \le N \le 10^5 1≤N≤105, 0 ≤ A i , B i , C i ≤ 1 0 5 0 \le A_i, B_i, C_i \le 10^5 0≤Ai​,Bi​,Ci​≤105。

二分code:

#include<iostream>
#include<algorithm>
using namespace std;
const int N=100010;
int n;
int a[N],b[N],c[N];
int binary_search1(int x){
    int l=0,r=n+1;
    while(l+1<r){
        int mid=(l+r)/2;
        if(a[mid]<x) l=mid;
        else r=mid;
    }
    return l;
}
int binary_search2(int x){
    int l=0,r=n+1;
    while(l+1<r){
        int mid=(l+r)/2;
        if(c[mid]<=x) l=mid;
        else r=mid;
    }
    return r;
}
int main(){
    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+1+n);
    sort(b+1,b+1+n);
    sort(c+1,c+1+n);
    long long res=0;
    for(int i=1;i<=n;i++){
        int B=b[i];
        int A=binary_search1(B);
        int C=n-binary_search2(B)+1;
        res+=(long long)A*C;
    }
    cout<<res;
    return 0;
}

双指针code:

#include<iostream>
#include<algorithm>
using namespace std;
const int N=100010;
int n;
int a[N],b[N],c[N];
int main(){
    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+1+n);
    sort(b+1,b+1+n);
    sort(c+1,c+1+n);
    long long res=0;
    for(int i=1,j=1,k=1;i<=n;i++){
        int B=b[i];
        while(j<=n&&a[j]<B) j++;
        while(k<=n&&c[k]<=B) k++;
        res+=(long long)(j-1)*(n-k+1);
    }
    cout<<res;
    return 0;
}

标签:sort,le,int,long,三元组,蓝桥,cdots,2018,100
From: https://blog.csdn.net/2301_80662593/article/details/140448915

相关文章

  • [N1CTF 2018]eating_cms 1
    信息收集,文件上传,rce,代码审计打开之后是一个登录页面,同时他的url是login,呢么第一反应应该是看看有没有register.php发现是有的,..但是admin是注册不了的,呢么我们先随机注册一个尝试看看能不能更改权限,登陆上之后发现是没有session的也就是目前没办法切换admin账号,但是url可......
  • eclipse免安装版64位 2018版本
    前言Eclipse是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse附带了一个标准的插件集,包括Java开发工具(JavaDevelopmentKit,JDK)。虽然大多数用户很乐于将Eclipse当作Java集成开发......
  • 打卡信奥刷题(332)用Scratch图形化工具信奥B3739[普及组/提高] [信息与未来 2018] 整数
    [信息与未来2018]整数乘方题目描述定义aaa的nnn次幂......
  • P8704 [蓝桥杯 2020 省 A1] 填空问题 题解
    题目传送门A.跑步训练我们经过仔细观察,可以发现每222分钟就会消耗300300......
  • [SUCTF 2018]GetShell 1
    自增绕过,文件上传打开是一个白的页面,开始信息收集,可以在前端代码中看到,index.php?act=upload尝试访问之后发现是文件上传发现是直接给了源码的,代码解释:这段PHP代码用于处理一个通过HTML表单上传的文件,并检查该文件的内容是否包含任何黑名单中的字符。下面是逐行解释:if($co......
  • 从零开始备战蓝桥杯——一天一个小算法第一天(排序篇)
    今天使我们学习算法的第一天,算法内容为冒泡排序和选择排序。冒泡排序思想:两两相邻数字排序,小的放在前面大的放在后面。从左往右遍历,不断重复第一步,这样可以永远保证大的在最后面重复上述操作,可以得到一个数组从小到大的排序。事例:假设我们有n个数字。第一次比较遍历全......
  • [CTSC2018] 混合果汁
    先考虑如何处理单个询问,看到了最大值最小,不难想到二分但是为了整体二分的方便,这个check函数必须这么写:先将果汁以美味度排序,然后以价格为下标建立树状数组,将美味度不低于\(mid\)的果汁扔进树状数组里面(注意有两个树状数组,一个用来几率体积,另一个用来记录体积乘以价格),然后再二分价......
  • pwnable.tw | 第3题cve-2018-1106
    前言pwnable.tw第三题,开始上难度了,考验的是一款真实程序的漏洞利用。漏洞源于一款开源的苹果AFP协议服务器程序Netatalk,漏洞最早是2018年发现的,2019年在HITCONQuals展示了1day利用,相关文章如下:2018年漏洞作者的原文翻译:NetatalkCVE-2018-1160的发现与利用hitcon相关文章:HITC......
  • 蓝桥杯单片机学习总结(Day4 独立按键实现LED流水灯)
    标题一:实现独立按键输出标题二:实现按键输出的效果标题三:实验总结      如图所示,S7、S6、S5、S4是独立按键一列,需要注意的是如果你的开发板独立按键和矩阵键盘是一体的如上图需要把引脚盖接到独立键盘那儿。    P30~P33是矩阵键盘和独立按键的引脚在编......
  • 蓝桥杯单片机学习总结(Day1 实现LED闪烁)
    标题一:通过SM74HC138译码器打开控制8个LED灯的寄存器标题二:编程思路标题三:总结 打开LED寄存器: 由开发板的原理图可知其8个LED灯的寄存器开关为SM74HC138译码器(以下用38译码器称代)的Y4口,该38译码器的输入端P25~P27,其分别对应P25->SM74HC138_A、P26->SM74HC138_B、P27->S......