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

《P3157 [CQOI2011] 动态逆序对》

题目描述

对于序列 a,它的逆序对数定义为集合

{(i,j)∣i<j∧ai​>aj​}

中的元素个数。

现在给出 1∼n 的一个排列,按照某种顺序依次删除 m 个元素,你的任务是在每次删除一个元素之前统计整个序列的逆序对数。

输入格式

第一行包含两个整数 n 和 m,即初始元素的个数和删除的元素个数。
以下 n 行,每行包含一个 1∼n 之间的正整数,即初始排列。
接下来 m 行,每行一个正整数,依次为每次删除的元素。

输出格式

输出包含 m 行,依次为删除每个元素之前,逆序对的个数。

输入输出样例

输入 #1复制

5 4 1 5 3 4 2 5 1 4 2

输出 #1复制

5 2 2 1

说明/提示

【数据范围】
对于 100% 的数据,1≤n≤105,1≤m≤50000。

【样例解释】
删除每个元素之前的序列依次为:

1,5,3,4,21,3,4,23,4,23,2

代码实现:

#include <cstdio> #include <algorithm> #define lowbit(x) ((x)&(-x)) #define N 150010 #define ll long long using namespace std; struct nd{ int id, x, y; nd(){} nd(int a, int b, int c):id(a), x(b), y(c){} friend bool operator <(nd a, nd b){return (a.x==b.x)?a.y<b.y:a.x<b.x;} }A[N], tmp[N]; int n, m, pos[N]; ll res[N]; inline int rd(){ int x=0, f=1; char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f; } namespace bit{ int tr[N]; inline void upd(int x, int v){for(;x<=n;x+=lowbit(x))tr[x]+=v;} inline int qry(int x){int s=0;for(;x;x-=lowbit(x))s+=tr[x];return s;} inline void clr(int x){for(;x<=n&&tr[x];x+=lowbit(x))tr[x]=0;} } void cdq(int l, int r){ if(l==r) return; int mid=(l+r)>>1; cdq(l, mid), cdq(mid+1, r); for(int p=l, q=mid+1, cnt=l;p<=mid||q<=r;) if(q>r||p<=mid&&A[p]<A[q]) bit::upd(A[p].y, 1), tmp[cnt++]=A[p++]; else res[A[q].id]+=bit::qry(n)-bit::qry(A[q].y), tmp[cnt++]=A[q++]; for(int i=l;i<=mid;++i) bit::clr(A[i].y); for(int i=l;i<=r;++i) A[i]=tmp[i]; for(int i=r;i>=l;--i) if(A[i].id<=mid) bit::upd(A[i].y, 1); else res[A[i].id]+=bit::qry(A[i].y); for(int i=l;i<=r;++i) bit::clr(A[i].y); } bool cmp_id(nd a, nd b){return a.id<b.id;} int main(){ n=rd(), m=rd(); for(int i=1, x;i<=n;++i) pos[x=rd()]=i, A[i]=nd(0, i, x); int tim=n; for(int i=1, x;i<=m;++i) A[pos[rd()]].id=tim--; for(int i=1;i<=n;++i) if(!A[i].id) A[i].id=tim--; sort(A+1, A+n+1, cmp_id); cdq(1, n); for(int i=1;i<=n;++i) res[i]+=res[i-1]; for(int i=n;i>=n-m+1;--i) printf("%lld\n", res[i]); return 0; }
http://www.jsqmd.com/news/342624/

相关文章:

  • Java实习模拟面试实录:字节跳动日常实习三面深度复盘 —— 集合、JVM、MySQL索引、Redis原理 + 手撕LRU,全面考察工程与底层能力!
  • 探索大数据领域数据中台的实时处理能力
  • Axolotl:把 LLM 微调从“脚本地狱”拉回到“配置即服务”的那一刻
  • Java实习模拟面试实录:网思科技(济南)后端岗45分钟深度拷打 —— SaToken原理、延迟双删、SQL优化、RAG流程全解析!
  • 分数取模的应用
  • AI代理记忆综述:从“短期失忆“到统一框架,一文读懂智能体记忆系统设计
  • $\chi^2(k)$
  • Java后端实习模拟面试实录:高并发、分布式与数据库核心问题深度解析(牛客网一面)
  • 热销榜单:2026年国内高口碑凤凰单丛茶厂家推荐 - 睿易优选
  • PMW-800-1000钢绞线锚具液压脉动疲劳试验系统
  • Java实习模拟面试实录:致远互联一面高频考点全解析 —— Spring MVC、线程安全、AOP、分库分表、MySQL优化一网打尽!
  • 导师要求降AI率怎么办?如何快速降低论文AIGC疑似度 - 我要发一区
  • HCIP第一次作业
  • 必看!2026年重庆预应力配件公司推荐排行榜,连接器预应力配件供应商哪家权威? - 睿易优选
  • PQW系列乘用车车轮旋转弯曲疲劳试验机
  • apple script 激活指定的vscode的窗口,以‘notes’开头的窗口
  • 2026年重庆1*7钢绞线厂家推荐,主要有哪些值得关注的供应商? - 睿易优选
  • 鼠大侠授权系统V2.0最新版下载
  • 论文降AI率要花多少钱?AIGC疑似度优化的成本分析 - 我要发一区
  • 2026全新个人发卡网 可以上传自己收款码无需第三地方接口带搭建教程
  • 2026中医执医考试机构课程推荐:哪些值得选 - 医考机构品牌测评专家
  • 2026年评价高的心理公司推荐:成都心理专家/成都心理医生/成都心理咨询专家/成都心理咨询师/成都心理咨询机构/选择指南 - 优质品牌商家
  • 小笑授权系统V7.3全开源版支持二开
  • 中医执业医师视频课程推荐:高效备考指南 - 医考机构品牌测评专家
  • 华为链路聚合原理 - 教程
  • 文科论文怎么降AI率?人文社科类论文的AIGC检测应对策略 - 我要发一区
  • 基于html的书城阅读器系统的设计与实现(源码+论文+部署+安装)
  • 理工科论文AI检测率高怎么办?技术类论文降AIGC疑似度的特殊技巧 - 我要发一区
  • 2026年成都心理咨询机构厂家最新推荐:成都心理专家/成都心理医生/成都心理咨询专家/成都心理咨询中心/成都心理咨询师/选择指南 - 优质品牌商家
  • 安装nodejs,安装cnpm,安装Angular脚手架,创建Angular项目