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

打卡信奥刷题(3235)用C++实现信奥题 P8449 [LSOT-1] 逆序对

P8449 [LSOT-1] 逆序对

题目背景

逆序对真好玩

题目描述

你需要维护一个数列,支持以下444种操作:

  1. 区间交换;
  2. 把一个区间向后移动到第kkk个数字与第k+1k+1k+1个数字之间;
  3. 在最后插入一个数xxx
  4. 在开头插入一个数xxx

每个数数的序号为新序列重新从第一个数到第kkk个数编号为111kkk

现在每次操作过后,请你输出整个数列逆序对数量的奇偶性。

输入格式

第一行输入两个正整数n,mn,mn,m,表示初始序列的长度与操作个数。

接下来一行输入nnn个正整数a1,a2,…,ana_1,a_2,\dots,a_na1,a2,,an,表示初始序列。

接下来mmm行,每行先输入一个ttt表示操作编号,之后:

  • t=1t=1t=1,则输入四个正整数l1,r1,l2,r2l_1,r_1,l_2,r_2l1,r1,l2,r2,表示将区间[l1,r1][l_1,r_1][l1,r1]与区间[l2,r2][l_2,r_2][l2,r2]整体交换,保证l1≤r1<l2≤r2l_1\le r_1< l_2\le r_2l1r1<l2r2
  • t=2t=2t=2,则输入三个正整数l,r,kl,r,kl,r,k,表示将区间[l,r][l,r][l,r]移动至序列的第kkk个数与第k+1k+1k+1个数之间,保证r<kr<kr<k
  • t=3t=3t=3,则输入一个正整数xxx,表示将xxx插入到序列末端;
  • t=4t=4t=4,则输入一个正整数xxx,表示将xxx插入到序列首端。

输出格式

对于每一个指令执行后,如果逆序对数量是偶数,请输出even,否则输出odd

输入输出样例 #1

输入 #1

6 4 4 3 5 7 2 6 1 1 1 2 2 2 1 1 3 3 11 4 1

输出 #1

odd odd odd odd

说明/提示

【样例解释】

第一次操作将区间[1,1][1,1][1,1]和区间[2,2][2,2][2,2]交换,序列变为3 4 5 7 2 6

第二次操作将区间[1,1][1,1][1,1]移动到第333和第444个数中间。序列变为4 5 3 7 2 6

第三次操作在序列末端插入111111,序列变为4 5 3 7 2 6 11

第四次操作在序列开头插入111,序列变为1 4 5 3 7 2 6 11

【数据范围】

「本题采用捆绑测试」

  • Subtask 1(10 pts): n,m≤102\texttt{Subtask 1(10 pts): }n,m\le 10^2Subtask 1(10 pts):n,m102
  • Subtask 2(15 pts): n,m≤103\texttt{Subtask 2(15 pts): }n,m\le 10^3Subtask 2(15 pts):n,m103
  • Subtask 3(20 pts): \texttt{Subtask 3(20 pts): }Subtask 3(20 pts):没有一二操作;
  • Subtask 4(20 pts): \texttt{Subtask 4(20 pts): }Subtask 4(20 pts):没有三四操作;
  • Subtask 5(35 pts): \texttt{Subtask 5(35 pts): }Subtask 5(35 pts):无特殊限制。

对于100%100\%100%的数据,1≤n,m≤2×105,ai≤2×1061\le n,m \le 2\times 10^5,a_i\le 2\times10^61n,m2×105,ai2×106,保证在任意时刻aaa中的数均互不相同。

C++实现

#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;constintmaxn=2000004;intres,n,m,a,tr[maxn];voidadd(intp,intv){while(p<=maxn-2){tr[p]+=v;p+=p&-p;}}intsum(intp){intret=0;while(p){ret+=tr[p];p-=p&-p;}returnret;}signedmain(){scanf("%lld %lld",&n,&m);for(inti=1;i<=n;i++){scanf("%lld",&a);res^=sum(maxn-2)-sum(a);add(a,1);}while(m--){intop,k,l1,r1,l2,r2,n1,n2,N,x;scanf("%lld",&op);if(op==1){scanf("%lld %lld %lld %lld",&l1,&r1,&l2,&r2);n1=r1-l1+1,n2=r2-l2+1,N=l2-r1-1;res^=N*(n1+n2)+n1*n2;}if(op==2){scanf("%lld %lld %lld",&l1,&r1,&k);n1=r1-l1+1,n2=k-r1;res^=n1*n2;}if(op==3){scanf("%lld",&x);res^=sum(maxn-2)-sum(x);add(x,1);}if(op==4){scanf("%d",&x);res^=sum(x);add(x,1);}puts(res&1?"odd":"even");}return0;}

后续

接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容

http://www.jsqmd.com/news/782792/

相关文章:

  • CANN/cannbot-skills工具编写指南
  • 2026年论文如何去AI痕迹?AIGC降重教程与实战案例 - 降AI实验室
  • 前端框架使用vue-cli( 第一层:依赖与环境层)
  • 2026年新疆票据印刷采购全攻略:源头直供如何降低企业成本80% - 优质企业观察收录
  • CANN/opbase:设置张量原始地址
  • CANN/ops-fft贡献指南
  • 20241223 2025-2026-2 《Python程序设计》实验三报告
  • 中国楼宇自控行业洗牌 楼宇自控厂家头部企业有谁?楼宇自控十大品牌 - 博客万
  • 网关支付 VS 纯代付:核心差异与适用场景
  • 影刀RPA如何实现店群自动化:拆解多浏览器并发,打造拼多多与TEMU的“超级航母”矩阵
  • AI专著生成新方法!借助工具,快速产出20万字高质量专著!
  • 一个老旧小区门禁改造项目的技术选型复盘:从云端到边缘
  • 亨得利腕表维修行业内部解密:假官方年骗1386起、保养套路大起底与全国官方直营网点联络大全 - 亨得利腕表维修中心
  • 加盟岩茶品牌,新手小白如何甄别真假“全程带教”?——以溪谷留香为样本的赋能体系深度解构 - 商业科技观察
  • 博客园优化折叠框
  • 为什么配置了Linux kernel以后.config文件没有起作用?
  • CANN/torchtitan-npu测试指南
  • CANN/hcomm引擎上下文复制
  • 2026年新疆票据印刷与热敏收银纸采购完全指南:源头直供降成本方案 - 优质企业观察收录
  • 3步掌握开源游戏加速:OpenSpeedy高效配置完全指南
  • 魔兽争霸3终极兼容性修复指南:5个简单步骤让经典游戏在Windows 11完美运行
  • 2026年水刀配件采购全攻略:从成都源头厂家到一站式解决方案 - 企业名录优选推荐
  • 江西菜代表品牌有哪些?2026年5大品牌实测推荐 - 速递信息
  • CANN/ops-cv最近邻上采样2D算子
  • ClaudeCode用户如何配置Taotoken解决API密钥被封与Token不足问题
  • 本地AI智能体平台搭建:基于Docker与Ollama的自动化工作流实践
  • QLoRA量化技术在日语技术文档处理中的应用实践
  • 盘活闲置沃尔玛购物卡,让每一笔钱都花在刀刃上 - 团团收购物卡回收
  • 2026耐火电力电缆品牌实测:优质厂家深度测评+工程采购避坑全指南 - 深度智识库
  • 盘活分期乐购物额度,轻松优化你的个人现金流 - 团团收购物卡回收