当前位置: 首页 > news >正文

题解:学而思编程 数对数目

【题目来源】

学而思编程:数对数目

【题目描述】

给定一个长度为 \(n\) 的序列 \(a_1,a_2,\dots,a_n\)。请你找出一共有多少个数对 \((i,j)\) 满足 \(a[i]\lt i\lt a[j]\lt j,1\le i,j\le n\)

例如,长度为 \(8\) 的序列 \([1,1,2,3,8,2,1,4]\),有 \(3\) 个满足要求的数对:\((2,4)\)\((2,8)\)\((3,8)\)

1)数对 \((2,4)\)\(a[2]=1,a[4]=3\) 满足 \(a[2]<2<a[4]<4\)

2)数对 \((2,8)\)\(a[2]=1,a[8]=4\) 满足 \(a[2]<2<a[8]<8\)

3)数对 \((3,8)\)\(a[3]=2,a[8]=4\) 满足 \(a[3]<3<a[8]<8\)

【输入】

第一行,一个整数 \(n\)
第二行,\(n\) 个整数 \(a_1,a_2,…,a_n\)​。

【输出】

一行,一个整数,表示满足要求的数对数目。

【输入样例】

8
1 1 2 3 8 2 1 4

【输出样例】

3

【核心思想】

  1. 问题分析:给定长度为 \(n\) 的序列 \(a\),求满足 \(a[i] < i < a[j] < j\) 的数对 \((i, j)\) 数量。条件可拆解为:\(i\) 需满足 \(a[i] < i\)\(j\) 需满足 \(a[j] < j\),且 \(i < a[j]\)。这是一个前缀和问题,核心在于固定 \(j\),统计满足 \(a[i] < i\)\(i < a[j]\)\(i\) 的数量。

  2. 算法选择

    • 前缀和预处理\(s[i]\) 表示前 \(i\) 个位置中满足 \(a[k] < k\) 的位置个数
    • 固定 \(j\) 统计:对于每个满足 \(a[j] < j\)\(j\),答案累加 \(s[a[j]-1]\)(即位置 \(1\)\(a[j]-1\) 中满足 \(a[i] < i\) 的个数,这些 \(i\) 自然满足 \(i < a[j]\)
  3. 关键步骤

    • 初始化:读取 \(n\)\(a[1..n]\)
    • 前缀和预处理\(i\)\(1\)\(n\)):
      • \(a[i] < i\)\(s[i] = s[i-1] + 1\)(当前位置满足条件,计数加 \(1\)
      • 否则:\(s[i] = s[i-1]\)(继承前一个位置的计数)
    • 统计答案\(j\)\(1\)\(n\)):
      • \(a[j] < j\)\(a[j] - 1 \geq 1\)
        • \(ans += s[a[j] - 1]\)(位置 \(1\)\(a[j]-1\) 中满足 \(a[i] < i\) 的个数,这些 \(i\) 满足 \(i \leq a[j]-1 < a[j]\),即 \(i < a[j]\)
    • 输出答案 \(ans\)
  4. 时间/空间复杂度

    • 时间复杂度:\(O(n)\),两次线性遍历
    • 空间复杂度:\(O(n)\),前缀和数组
  5. 前缀和的核心思想

    • 条件拆解:将 \(a[i] < i < a[j] < j\) 拆分为 \(i\) 的条件(\(a[i] < i\))和 \(j\) 的条件(\(a[j] < j\)\(i < a[j]\)),固定 \(j\)\(i\) 的范围是 \([1, a[j]-1]\)
    • 前缀和快速查询\(s[a[j]-1]\)\(O(1)\) 时间内给出满足条件的 \(i\) 的数量,避免每次枚举 \(i\)
    • 边界处理\(a[j] - 1 \geq 1\) 确保查询范围有效
    • 适用于区间统计、条件数对、双变量约束类问题

【解题思路】

【算法标签】

前缀和

【代码详解】

#include <bits/stdc++.h>
using namespace std;
int n, a[2000005], s[2000005];
long long ans;
int main()
{cin >> n;for (int i=1; i<=n; i++) {scanf("%d", &a[i]);if (a[i]<i) s[i] = s[i-1]+1;  // 预处理i及之前满足a[i]<i的个数else s[i] = s[i-1];}for (int j=1; j<=n; j++) {  // 遍历n个数if (a[j]<j && a[j]-1>=1) {  // 满足a[j]<jans += s[a[j]-1];  // 并计算a[j]-1(肯定小于a[j])坐标下满足a[a[j]-1]<(a[j]-1)的个数}}cout << ans << endl;  // 输出结果return 0;
}

【运行结果】

8
1 1 2 3 8 2 1 4
3
http://www.jsqmd.com/news/1376935/

相关文章:

  • 开户许可证登报需要带什么资料?线上上传证件材料清单汇总 - 实用干货补给站
  • 2026年广东肇庆七大翡翠回收公司推荐!2026 最新推荐出炉,诚真翡翠回流优势突出 - 十大品牌榜
  • 户口本翻译件去哪里弄才合规?靠谱渠道实测不耽误行程 - 实用干货补给站
  • 题解:学而思编程 团队赛
  • 沧州高速救援优选!金良汽修7年老店,就近快速驰援全天候待命 - 收录优先
  • 2026火锅店SAAS收银系统服务商全盘点:正规合规机构选型指南与避坑FAQ,附金华本地**服务商凤梨网络科技(客如云、美团收银金华代理商)详解 - 商业大观
  • 2026年成都企业股权搭建咨询咋找?这份选型指南为你解惑 - 企业推荐官
  • 选手自主报名投票怎么开启?云众评选自助报名功能实测 - 微信投票小程序
  • 出生证明丢失登报需要什么材料?证件清单、线上上传要求说明 - 实用干货补给站
  • 2026曹县装修避坑指南!本土装饰装修如何选靠谱家装公司 - 收录优先
  • 题解:学而思编程 数组旋转
  • 济源厨电维修避坑指南:主流商家对比,道合家用电器凭实力出圈 - 收录优先
  • 【青岛举办 | 青岛大学、青岛滨海学院主办】第六届电力系统与能源互联网国际学术会议(PoSEI 2026) - 科研小猫(努力毕业版)
  • 【泄底】煞风景的早间首班车(青崎有吾)
  • 2026年出行同意书公证线上办理入口及操作步骤(附涉外公证翻译要求) - 慧办好
  • 2026 东莞发常州物流专线公司推荐 | 工程机械、橡胶配件、泡沫包装、橱柜卫浴整车零担 - GrowthUME
  • 真实铸经典,新大众文艺看《讷河往事》 - 滚动商讯
  • 2026年国内服装店收银系统服务商全景盘点与避坑指南,附本地**服务商凤梨网络科技服务能力解读 - 行业观察网
  • 卫辉圣希尔门窗:本地家装门窗选购怎么避坑?实用参考 - 收录优先
  • 智能眼镜/穿戴设备怎么优化?内部知识统一后,AI才信你 - AZJ888
  • 2026南京专业水下打捞服务**:急难险重找他们就对了 - GrowthUME
  • 2026甲醛治理深度测评:让数据说话,效果不吹不黑 - GrowthUME
  • 单仁牛商玄琨GEO:AI搜索获客的GEO实战落地指南|工程化流程解析 - 汇聚至此
  • 【企业干货】aaa 信用证书是什么,你知道能用来做什么吗? - 慧办好
  • 国内质量控制统计软件对比的真相:算法自研还是开源封装、客户二次开发案例及培训生态完善度 - 小橘甄选
  • 【泄底】密室狂乱时代的孤岛事件(鸭崎暖炉)
  • 干货科普|3a 评级对企业有哪些好处,办资质前一定要看完 - 慧办好
  • 2026 苏州发惠州物流专线公司推荐 | 塑胶原料、家电外壳、五金模具、电商百货整车零担 - GrowthUME
  • 2026年GEO优化实战:AI搜索获客避坑指南 - GrowthUME
  • 2026年8月济南宏碁电脑维修网点怎么查|10个区域、11条地址与黑屏、充电异常与接口失灵 - 数码品牌推荐