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

题解:AT_abc452_f

题面

Interval Inversion Count

问题描述

给定一个正整数N NN和一个由1 , 2 , … , N 1 , 2 , \dots , N1,2,,N组成的排列P = ( P 1 , P 2 , … , P N ) P = (P _ 1 , P _ 2 , \dots , P _ N)P=(P1,P2,,PN)

给定一个整数K KK。求满足以下两个条件的整数对( l , r ) (l , r)(l,r)的数量。

约束条件

输入

标准输入按以下格式给出:

N NNK KK
P 1 P _ 1P1P 2 P _ 2P2… \dotsP N P _ NPN

输出

输出满足条件的区间( l , r ) (l , r)(l,r)的个数。

思路

观察逆序数为K KK的区间的分布规律,并非绝对单调性,但注意到逆序数为K KK的区间个数等于总区间个数减逆序数小于与大于K KK的区间个数之和。而两者皆有绝对单调性,所以使用双指针套树状数组来解决这两个子问题。

求解逆序数小于K KK的区间个数,对每个左端点l ∈ [ 1 , n ] l \in [1 , n]l[1,n],遍历找出最后一个r rr使得逆序数小于K KK,并记录答案。大于则同理,对每个左端点l ∈ [ 1 , n ] l \in [1 , n]l[1,n],同样遍历找出第一个r rr使得逆序数大于K KK,并记录答案。

双指针时间复杂度O ( n ) O(n)O(n),树状数组时间复杂度O ( log ⁡ n ) O(\log n)O(logn),总复杂度O ( n log ⁡ n ) O(n \log n)O(nlogn)

代码

#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;constintmaxn=1e6+5;intp[maxn];intn,k;intd[maxn];intlowbit(intx){returnx&(-x);}voidupdate(intpos,intx){for(;pos<=n;pos+=lowbit(pos)){d[pos]+=x;}}intquery(intpos){intres=0;for(;pos;pos-=lowbit(pos)){res+=d[pos];}returnres;}intsmaller(){if(k==0)return0;intl=1,r=1,tot=0,ans=0;update(p[1],1);while(r<n){if(tot>=k)break;r++;tot+=r-l-query(p[r]);update(p[r],1);}if(tot>=k){update(p[r],-1);tot-=r-l-query(p[r]);r--;}ans+=r;while(l<n){if(l==r){r++;tot+=r-l-query(p[r]);update(p[r],1);}update(p[l],-1);tot-=query(p[l]);l++;while(r<n){if(tot>=k)break;r++;tot+=r-l-query(p[r]);update(p[r],1);}if(tot>=k){update(p[r],-1);tot-=r-l-query(p[r]);r--;}ans+=r-l+1;}returnans;}intbigger(){for(inti=1;i<=n;i++){d[i]=0;}intl=1,r=1,tot=0,ans=0;update(p[l],1);while(r<n){if(tot>k)break;r++;tot+=r-l-query(p[r]);update(p[r],1);}if(tot<=k)return0;ans+=n-r+1;while(l<n){update(p[l],-1);tot-=query(p[l]);l++;while(r<n){if(tot>k)break;r++;tot+=r-l-query(p[r]);update(p[r],1);}if(tot<=k)returnans;ans+=n-r+1;}returnans;}voidsolve(){cin>>n>>k;for(inti=1;i<=n;i++){cin>>p[i];}cout<<n*(n+1)/2-smaller()-bigger()<<"\n";}signedmain(){intt=1;while(t--){solve();}return0;}
http://www.jsqmd.com/news/601756/

相关文章:

  • 隐私优先的实时语音转写:TMSpeech本地语音识别解决方案
  • 实战指南:基于SWIFT框架对Qwen2.5-VL-3B模型进行全参数微调
  • 千问3.5-2B应用指南:智能客服图片问答、内容审核实战解析
  • OpenClaw多任务并行:Qwen3-14b_int4_awq同时处理文件整理与邮件回复
  • Wan2.2-I2V-A14B模型生成复古像素艺术与游戏角色Sprite
  • 天利怎么样,浙江地区口碑好的厂家有哪些 - myqiye
  • 从单打独斗到团队协作:用Python虚拟环境和requirements.txt搞定项目环境一致性
  • TVA深度解析(8):项目部署的投资回报精细化测算
  • Axure疑难杂症:完美解决下拉列表被选项的读取和联动、以及无法赋值解析(版本之痛)
  • uni-app怎么获取微信小程序订阅消息授权 uni-app权限诱导引导【代码】
  • STM32智能光控系统在养殖场的应用实践
  • 2026六国水上市场情侣民宿攻略大汇总,西双版纳酒店/民宿/住宿/酒店/西双版纳住宿/西双版纳民宿,民宿实力花卉园 - 品牌推荐师
  • 如何高效配置HS2-HF Patch:200+插件一键安装专业指南
  • PyTorch 2.9镜像效果实测:如何利用新特性提升资源利用率与训练效率
  • 零门槛实战:在AutoDL云端一键部署与训练你的专属LoRA模型
  • 认知撕裂:亚马逊上,为何品牌延伸会制造“搜索意图”与“品牌印象”的致命冲突
  • 如何通过NetEase-Cloud-Music-DiscordRPC实现Discord音乐状态智能同步?
  • 个人财务助手:OpenClaw+千问3.5-35B-A3B-FP8自动解析银行卡账单
  • 2026帕金森治疗突破:全新机制药物问世!十大神经修复产品深度测评:温和无负担 - 博客万
  • BilibiliDown:B站视频高效下载的4个核心解决方案
  • AI辅助开发:让快马AI帮你编写微信小程序列表页的复杂交互代码
  • 如何在Windows 10/11上轻松运行经典老游戏?DDrawCompat实用指南
  • 品牌稀释:在亚马逊,为何“爆款延伸”会导致市场份额的全面崩塌
  • 跨世塑料制品有限公司实力怎么样,适合承接小批量订单吗 - 工业品网
  • 零基础玩转esp32,快马平台ai生成带注释示例代码助新手快速入门
  • Linux下vcan接口从配置到实战:手把手教你搭建虚拟CAN测试环境
  • 提升英雄联盟游戏体验:基于LCU API的智能客户端工具集实战指南
  • (论文速读)FD-LLM:将振动信号编码为文本表示来将振动信号与大型语言模型进行对齐
  • MSP430 UNIFLASH升级避坑指南:从IAR工程配置到成功烧录全流程
  • 品类替代危机:在亚马逊,为何“延续爆款品牌”是应对技术变革的最大陷阱