近日C国某领海主权屡次被境外反动势力挑衅,中央军委决定进行两栖登岛作战演习以震慑国内外反动势力。在某个作战演习过程中,有n支不同规模的我方部队在敌国境内进行战斗演习,他们的作战编号是1~n。现在需要集结优势兵力,各个歼灭敌方残余势力。为了保证我方整体灵活性,wz决定选出两支队伍进行组排。为方便组排,规定只能由规模较大的部队带领编号比他大的且规模严格比他小的部队进行作战演习。假如你是此次军事行动的总指挥wz,请问你知道有多少对可以组排的队伍吗?

输入格式:

第一行,一个数n,表示有n支部队。
第二行n个数,表示每支部队的军事规模大小。序列中每个数字不超过 10^9

输出格式:

输出存在多少对可以两两组排的部队。

输入样例:

6
5 4 2 6 3 1

 输出样例:

11

这题实质就是求逆序对,求逆序对有四种方法:

  • 冒泡排序(会有测试点超时):没交换一次,结果就加一次
  • 归并排序:时间复杂度O(nlogn),大部分题都不会超时
  • 离散化+树状数组
  • 线段树

第三种和第四种算法参考逆序对的三种求法

参考代码:

#include<iostream>
#include<cstdio>
using namespace std;
typedef long long ll;
ll sum=0;
int a[500100];
ll merge(int l,int mid,int r){int i=l,j=mid;int t=0;ll k=0;int b[r-l+1];int index=0;while(i<mid&&j<=r){if(a[i]>a[j]){b[index++]=a[j++];t++;}if(a[i]<=a[j]||j==r+1){k+=t*(mid-i);b[index++]=a[i++];t=0;}}while(i<mid) b[index++]=a[i++];while(j<=r)  b[index++]=a[j++];index=0;for(i=l;i<=r;i++)a[i]=b[index++];return k;
}
void mergesort(int l,int r){if(l>=r) return ;int mid=(l+r)/2;mergesort(l,mid);mergesort(mid+1,r);sum+=merge(l,mid+1,r);
}
int main(void){std::ios::sync_with_stdio(false);std::cin.tie(0);int n;cin>>n;for(int i=0;i<n;i++) cin>>a[i];mergesort(0,n-1);cout<<sum<<endl;
} //冒泡有一个测试点超时
// #include<iostream>
// using namespace  std;
// typedef long long ll;// int main(void){
//  int n;cin>>n;
//  ll sum=0;
//  int a[n];
//  for(int i=0;i<n;i++) cin>>a[i];
//  for(int i=1;i<n;i++){
//      int flag=0;
//      for(int j=0;j<n-i;j++){
//          if(a[j]>a[j+1]){
//              int temp=a[j+1];
//              a[j+1]=a[j];
//              a[j]=temp;
//              flag=1;
//              sum++;
//          }
//      }
//      if(flag==0) break;
//  }
//  cout<<sum<<endl;
// }

wz的作战演习计划--分治思想相关推荐

  1. 006.递归和分治思想

    为什么80%的码农都做不了架构师?>>>    斐波那契数列的递归实现  迭代实现  递归   1.递归 定义 迭代使用的是循环结构. 递归使用的是选择结构. 优点 使用递归 ...

  2. 递归和分治思想及其应用

    目录 递归和分治思想 一些实例 逆序输出字符串 查找数组元祖是否存在 汉诺塔问题 八皇后问题 更多: 递归和分治思想 如果可以使用迭代,尽量别使用递归.由编译原理可以知道,每次自调用的时候,计算机都需 ...

  3. 【算法】学习笔记(4):分治思想 归并排序

    分治思想,分治策略,自古有之,与人类生活息息相关,其本质是将大问题拆解为小问题,小问题转换为已知解的问题,进而求解. 军队管理,国家分级治理-- 大规模数据排序,例如10000000000万个数,规模 ...

  4. 使用分治思想求解最大子序列

    本文使用分治思想求解一个整型数组中的最大子序列,该算法的时间复杂度为NlogN,使用千万级的数据量计算结果的时间不超过0.5s.该算法使用了分治的思想:求解最大子序列的问题可以理解为将整个数组分成左右 ...

  5. 算法设计与分析:分治思想 - 入门

    文章目录 分治思想 判断分治的条件 分治思想在排序问题的应用 求逆序对的个数 分治总结 本文参考UCAS卜东波老师的计算机算法设计与分析课程完成 分治思想 分治思想可以归纳为两点: 将一个复杂问题化简 ...

  6. 汉诺塔问题——分治思想

    汉诺塔规则如下: 1.有三根相邻的柱子,标号为x,y,z. 2.x柱子上从下到上按金字塔状叠放着n个不同大小的圆盘. 3.现在把所有盘子一个一个移动到柱子z上,并且每次移动同一根柱子上都不能出现大盘子 ...

  7. 分治思想应用:数学归纳法、递归、归并排序、MapReduce

    跟黄申老师学数学系列02(python实现) 引言: 数学归纳法(Mathematical Induction).递归.归并排序(merge sort).MapReduce,这些方法或技术都基于一个重 ...

  8. 线性时间选择算法的分治思想:邮局选址问题和士兵战队问题

    一. 实验题目 1. 邮局选址问题 在一个按照东西和南北方向划分成规整街区的城市里,n 个居民点散乱地分 布在不同的街区中.用 x 坐标表示东西向,用 y 坐标表示南北向.各居民点的 位置可以由坐标( ...

  9. 【PTA】7-2 国王的奖励——分数取模、分治思想、快速幂、int64的乘法模运算【C/C++】

    文章目录 1 问题 1.1 题面描述 1.2 输入描述 1.3 输出描述 1.4 样例描述 1.5 样例解释 2 分析 2.1 数学抽象 2.2 解决方法 2.2.1 等比求和 2.2.1.1 求和公 ...

最新文章

  1. Java8 快速实现List转map 、分组、过滤等操作
  2. 如何让自己的开源库支持cocoapods?
  3. CDN简介及linux环境下搭建
  4. 第23天:指导与管理项目工作和4种合同的区别
  5. 机器学习——常用算法的总结
  6. 电脑装机完没有efi_电脑装机如何选内存?看完这篇就全懂了
  7. Android studio实现底部导航,AndroidStudio制作底部导航栏以及用Fragment实现切换功能...
  8. Oracle 单实例 迁移到 RAC 实例 -- 使用导出导入方法
  9. 谷歌浏览器xp32位_如何正确的配置系统的浏览器系列篇(五)——合同管理系统...
  10. 双屏1920*1080时全屏显示PPT时,出现第二块屏分辨率自动降低的问题
  11. Mac解决Updating Homebrew卡顿
  12. AFEPack 使用 Tutorial(二):解带系数二维泊松方程
  13. Excel中的LEN和LENB,VBA中的Len和LenB
  14. 【opencv 450 Image Processing】Image Moments 图像矩
  15. 有关HTTP2.0详解
  16. svn提交备注_svn 中commit时必须填写备注信息如何设置
  17. iOS文件下载(二)
  18. 4.4-4.7网络模型、协议
  19. 2009年中国各省GDP排名
  20. 小型 Linux 发行版 CDlinux 0.9.7 发布cdlinux

热门文章

  1. 提取16线激光雷达扫描线
  2. 这车模,就一个字:小巧灵动
  3. java –cp ./:_7位专家– 7条意见:您如何看待新的Java发布周期?
  4. 学习-输入正整数m,判断m是否是素数
  5. rss源_如何在Windows桌面上显示RSS源
  6. Ubuntu 18.04.2 LTS更换国内快速更新源的正确姿势
  7. ESP32 使用 ESP-AT 测试 MQTT WSS 连接和数据传输的流程
  8. 项目实训第五周团队及个人进展汇报
  9. 我所玩过的GALGAME——メンアットワーク!魔兽学院men at work2的中文版《永远的羁绊》全攻略...
  10. 《孙子略解》曹操注-2011