递增三元组

遍历三层循环,数据量十分地大,可以找第一行小于第二行的
再找第三行大于第二行的,所有方案的和

通过分析测试样例,111,222,333这三个数存在重复计算。可以想办法存一下每个数的出现次数
如果是111666999.不管1和9怎么变,只要第一行小于6,第二行小于9,答案不变
所以可以想办法存一下出现次数的前缀和


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;public class Main{static int n;static int N = 100010;static int[] a = new int[N];static int[] b = new int[N];static int[] c = new int[N];static int[] cnt = new int[N];  //存储数组中每个数出现的次数static int[] s = new int[N];    //存储次数的前缀和static int[] as = new int[N];   //有多少个数比第i个数小static int[] cs = new int[N];   //有多少个数比第i个数大static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));public static void main(String[] args) throws IOException {n = Integer.parseInt(in.readLine());//存储输入数据String[] x = in.readLine().split(" ");String[] y = in.readLine().split(" ");String[] z = in.readLine().split(" ");//为了方便,可以从下标1的位置开始读取存储的数据//最后 + 1 是因为后面的s[b[i] - 1] 会出现下标越界的情况//把所有读入的值统一 + 1for (int i = 1; i <= n; i++) {a[i] = Integer.parseInt(x[i - 1]) + 1;b[i] = Integer.parseInt(y[i - 1]) + 1;c[i] = Integer.parseInt(z[i - 1]) + 1;}//cnt[i] : 表示a[i] 中每个数出现的个数for (int i = 1; i <= x.length; i++) cnt[a[i]]++;//s[i] : 表示 a数组每个数出现次数的前缀和//前缀和的限制条件要用i < N//比如只有3个数,但这三个数可能大于3for (int i = 1; i < N; i++) s[i] = cnt[i] + s[i - 1];//as[i] 表示 a[i] 中 有多少个数比 b[i]小//也就是 用s[x] 表示,s[x]表示 <= x的数有多少个//不能取等 所以 x = b[i] - 1//也就是as[i] = s[b[i] - 1]//注意题目给的数据是无序的for (int i = 1; i <= x.length; i++) as[i] = s[b[i] - 1];Arrays.fill(s,0);Arrays.fill(cnt,0);//cnt[i] : 表示c[i] 中每个数出现的个数for (int i = 0; i <= z.length; i++) cnt[c[i]]++;//s[i] : 表示 c数组每个数出现次数的前缀和for (int i = 1; i < N; i++) s[i] = cnt[i] + s[i - 1];//要统计有多少个数比c[i]大,s[i]的含义是有多少个比i小的数//要统计比c[i]大的数,可以用s[N - 1] - s[b[i]]来算for (int i = 1; i <= z.length; i++) cs[i] = s[N - 1] - s[b[i]];//最后通过as[i] 和 cs[i] 相乘 再相加就可以得到结果long sum = 0;for (int i = 1; i <= n; i++) sum += (long)as[i] * cs[i];System.out.println(sum);in.close();}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/257181.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

每日一题:Leetcode1926.迷宫中离入口最近的出口

给你一个 m x n 的迷宫矩阵 maze &#xff08;下标从 0 开始&#xff09;&#xff0c;矩阵中有空格子&#xff08;用 . 表示&#xff09;和墙&#xff08;用 表示&#xff09;。同时给你迷宫的入口 entrance &#xff0c;用 entrance [entrancerow, entrancecol] 表示你一开始…

【Android Studio】【入门】helloworld和工程的各个文件的作用

这里写目录标题 可以开发的app类型注意点 搞一个helloworld玩玩各个文件的作用 可以开发的app类型 Phone and Tablet&#xff1a;开发手机和平板的app&#xff1b;Wear OS&#xff1a;穿戴系统&#xff1b;TV&#xff1a;电视app&#xff1b;Android Auto&#xff1a;汽车上的…

Linux 网络协议

1 网络基础 1.1 网络概念 网络是一组计算机或者网络设备通过有形的线缆或者无形的媒介如无线&#xff0c;连接起来&#xff0c;按照一定的规则&#xff0c;进行通讯的集合( 缺一不可 )。 5G的来临以及IPv6的不断普及&#xff0c;能够进行联网的设备将会是越来越多&#xff08…

linux文件查找_which_find_locate

7.1 文件查找 7.1.1 简介 which&#xff1a;命令查找 ​ find&#xff1a;文件查找&#xff0c;针对文件名 ​ locate&#xff1a;文件查找&#xff0c;依赖数据库7.1.2 which which命令用于查找文件。 ​ which指令会在环境变量$PATH设置的目录里查找符合条件的文件。 whi…

Linux_CentOS_7.9配置oracle sqlplus、rman实现上下按键切换历史命令等便捷效率功能之简易记录

配置oracle sqlplus以及rman可以上下按键切换历史命令等便捷效率功能 设置前提是已经yum安装了rlwrap软件具体软件下载及配置参考文章http://t.csdnimg.cn/iXuVK su - oracleVim .bash_profile ## 文件中增加如下的别名设置 ---------------- alias sqlplusrlwrap sqlplus…

[linux] 用命令行wget下载google drive的大文件

使用wget命令下载Google drive上的文件_ubuntu上wget下载谷歌云盘文件-CSDN博客 如何用命令行下载Google Drive上的共享文件&#xff1f;-腾讯云开发者社区-腾讯云 举例&#xff1a;https://drive.google.com/drive/folders/1vKj3VvJEKgS_o-uOSmz3I0-GomECpql3 1、在网页上&…

翡翠手镯镯子断了怎么修复?

修复翡翠镯子需要谨慎对待&#xff0c;因为翡翠是一种比较脆弱的宝石&#xff0c;不适合使用一般的胶水或者粘合剂。必须选择针对翡翠手镯玉器玉石珠宝宝石石材专用的胶粘剂&#xff1a; 1.收集断裂的部分&#xff1a; 尽量收集到所有断裂的部分&#xff0c;包括碎片。这有助于…

探索Spring事件监听机制的奇妙世界

文章目录 什么是Spring事件监听机制主要组件内置的事件监听类自定义事件监听类总结 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 什么是Spring事件监听机制 Spring事件监听机制是Spr…

ssh安装和Gitee(码云)源码拉取

文章目录 安装ssh服务注册码云公钥设置码云账户SSH公钥安装git客户端和git-lfs源码获取 安装ssh服务 更新软件源&#xff1a; sudo apt-get update安装ssh服务 sudo apt-get install openssh-server检查ssh是否安装成功 which ssh输出&#xff1a; /usr/bin/ssh启动ssh 服…

java之“输入与输出”程序详解

java之“输入与输出”程序详解 一、eclipse操作示例1、完整代码2、运行效果3、代码与运行结果关系图 一、eclipse操作示例 1、完整代码 import java.util.Scanner;public class inputOutput {/*** param args 输入与输出*/public static void main(String[] args) {// 输出Sy…

HL7/FHIR 是什么

如果你对上面 2 个单词不熟悉的话&#xff0c;那就需要先脑补下了。 HL7 HL7 可以认为是一个标准化的组织&#xff0c;这个组织主要对标准进行控制。 如果你希望在医疗系统中对数据进行交换&#xff0c;通常 HL7 现在就是事实上的标准了。 FHIR FHIR – Fast Health Inter…

51单片机的时钟电路与时序以及 复位电路和电源模式

51单片机的时钟电路与时序以及 复位电路和电源模式 本文主要涉及51单片机的时钟电路以及相关时序的知识&#xff0c;也讲解了了51单片机的复位电路以及电源模式。 文章目录 51单片机的时钟电路与时序以及 复位电路和电源模式一、时钟电路与时序1、 时钟电路设计1.1 内部时钟方式…