分治策略+归并排序

题目描述

emmmmm,实在不想贴题目,以免暴露学校。大家上网一搜大概就明白了。

这题求的是i<j<k,且a[j]>a[i]>a[k]的数目。

代码

ac了的

#include<iostream>
#include<stdlib.h>
#include<cstring>
using namespace std;
long long A[1000000];
long long n;
long long sameRevBehind[1000000];//在同一边,逆序的二元组  更新左半段
long long sameOrderBehind[1000000];//更新左半段
long long sameRevBefore[1000000];//更新右半段
long long difRevBehind[1000000];//在两侧,逆序的二元组 对左半段
long long difOrderBefore[1000000];//对右半段
long long difRevBefore[1000000];//对右半段
long long difOrderBehind[1000000];//对左半段
long long B[1000000];
long long Atag[1000000];
long long pos[1000000];long long triad(long long l, long long r) {if (l > r)return  -1;if (l == r) return 0;long long mid = (l + r) / 2;long long count = triad(l, mid) + triad(mid + 1, r);long long count1, count2,count3 , i, j, k;count1 = count2 = count3=0;i = l;j = mid + 1;k = l;while (i <= mid && j <= r) {if (A[i] < A[j]) {B[k] = A[i];pos[k] = Atag[i];difRevBehind[i] = j-mid-1;difOrderBehind[i] = r - j + 1;i++;}else {B[k] = A[j];pos[k] = Atag[j];difOrderBefore[j] = i - l;difRevBefore[j] = mid - i + 1;j++;}k++;}while (i <= mid) {B[k] = A[i];pos[k] = Atag[i];difRevBehind[i] = r-mid;difOrderBehind[i] = 0 ;i++;k++;}while (j <= r) {B[k] = A[j];pos[k] = Atag[j];difOrderBefore[j] = mid-l+1;difRevBefore[j] = 0;j++;k++;}//countingfor (i = l;i <= mid;i++) {count1 += difRevBehind[i] * sameOrderBehind[Atag[i]];}for (i = mid + 1;i <= r;i++) {count2 += difOrderBefore[i] * sameRevBehind[Atag[i]];count3 += sameRevBefore[Atag[i]] * difOrderBefore[i];}long long temp;for (i = l;i <= mid;i++) {sameOrderBehind[Atag[i]] += difOrderBehind[i];sameRevBehind[Atag[i]] += difRevBehind[i];}for (i = mid + 1;i <= r;i++) {sameRevBefore[Atag[i]] += difRevBefore[i];}count = count + count1 + count2 - count3;//cout << l <<"  "<< mid<<"  " << r<<"  " << "num:"<<count<<"\n"<<endl;//prlong long(l, r);for (i = l;i <= r;i++) {A[i] = B[i];Atag[i] = pos[i];}return count;
}long long main() {cin >> n;long long i;for (i = 0;i < n;i++) {cin >> A[i];//Atag[i] = i;}memset(sameRevBehind,0,sizeof(long long)*1000000);memset(sameOrderBehind, 0, sizeof(long long) * 1000000);memset(sameRevBefore, 0, sizeof(long long) * 1000000);memset(difRevBehind, 0, sizeof(long long) * 1000000);memset(difOrderBefore, 0, sizeof(long long) * 1000000);memset(difRevBefore, 0, sizeof(long long) * 1000000);memset(difOrderBehind, 0, sizeof(long long) * 1000000);memset(Atag, 0, sizeof(long long) * 1000000);memset(pos, 0, sizeof(long long) * 1000000);for (i = 0;i < 1000000;i++) {//cin >> A[i];Atag[i] = i;}long long result = triad(0, n - 1);cout << result << endl;
}

领奖台数/三元数组对相关推荐

  1. 数组三元数c语言程序,递增三元数组——第九届蓝桥杯C语言B组(省赛)第六题...

    原创 标题:递增三元组 给定三个整数数组 A = [A1, A2, ... AN], B = [B1, B2, ... BN], C = [C1, C2, ... CN], 请你统计有多少个三元组(i ...

  2. 三元二次方程式x2+y 2=z2的正整数解x、y、z称为一组勾股数,又称为毕达哥拉斯三元数组。该方程式也称为“商高方程”或“毕达哥拉斯方程”。 试通过程序设计求指定区间[a,b]内的所有勾股数组。

    /*试通过程序设计求指定区间[a,b]内的所有勾股数组. 输入 输入两个正整数a, b (a<b). 输出 输出[a,b]区间内的所有勾股数组. 样例输入 30, 90 样例输出*/ #defi ...

  3. c语言中triplet的作用,C语言数据结构-三元数组Triplet

    #include #include #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLF -1 ...

  4. 数组:矩阵快速转置 矩阵相加 三元组顺序表/三元矩阵 随机生成稀疏矩阵 压缩矩阵【C语言,数据结构】(内含源代码)

    目录 题目: 题目分析: 概要设计: 二维矩阵数据结构: 三元数组\三元顺序表顺序表结构: 详细设计: 三元矩阵相加: 三元矩阵快速转置: 调试分析: 用户手册: 测试结果: 源代码: 主程序: 头文 ...

  5. 绝对高效实现! 给你一个包含n个整数的数组nums,判断nums是否存在三个元素a,b,c使得a+b+c =0...

    所有实现代码均使用JAVA letcode上面有个算法题,贴原图 先分析一下: 第一个条件,a+b+c = 0,这个好办,最简单的就是循环三次,把所有情况都过一篇就可得到所有结果, 第二个条件,满足条 ...

  6. 数据结构与算法-Part6——数组与广义表

    目录 一丶数组 1:一维数组 2:二维数组 1)二维数组的概念 2)二维数组的顺序存储结构 3)二维数组的遍历 3:在C#中自定义矩阵类 二丶稀疏矩阵 1:稀疏矩阵的三元组 2:稀疏矩阵三元组集合的顺 ...

  7. 三元函数的几何图形一般是_多元函数的定义域与几何图形.PPT

    多元函数的定义域与几何图形 第一章 函数与极限 §1.8 多元函数的极限与连续 本节内容 多元函数的定义 多元函数的定义域与几何图形 二元函数的极限和连续性 §1.8 多元函数的极限与连续 多元函数的 ...

  8. 强化学习(一)- 强化学习介绍、Markov决策过程和贝尔曼期望方程

    强化学习(英语:Reinforcement learning,简称RL)是机器学习中的一个领域,强调如何基于环境而行动,以取得最大化的预期利益.其灵感来源于心理学中的行为主义理论,即有机体如何在环境给 ...

  9. 本科-人工智能复习题

    填空题 首次提出"人工智能"是在(1956)年 . 下列不属于人工智能的研究方法的是(动作模拟法). (语义网络法)是知识的一种结构化图解表示,它由节点和弧线或链线组成,能把实体的 ...

最新文章

  1. 1分钟选好最合适你的JavaScript框架
  2. C++类构造函数中的成员初始化
  3. (Mybatis)使用注解开发
  4. 社交平台中的会员等级制度建立需要注意哪些问题
  5. Java并发——结合CountDownLatch源码、Semaphore源码及ReentrantLock源码来看AQS原理
  6. 4.1 [单选]两化融合中的两化是指 - 关于两化融合(主讲:凌捷)笔记
  7. Android使用缓存优化ListView
  8. 653B. Bear and Compressing
  9. 打开cmd窗口新技巧get
  10. python 百度网盘下载提速_教你如何百度网盘的提高下载速度?
  11. 【LOJ】#2479. 「九省联考 2018」制胡窜
  12. 软件工程作业汇总(网络14、15、16)
  13. 数据结构与算法的分析
  14. linux下两个线程交替打印,两个线程交替打印AB
  15. ArcGIS三维制作步骤
  16. 正则表达式re中的group含义
  17. Win10防火墙端口设置不起作用
  18. 软件测试工程师成长之路 掌握软件测试九大技术主题
  19. 使用 AndroidSocketClient 库建立 SSL 安全链接
  20. 视觉3d中五折幕的震撼这就是沉浸式屏幕

热门文章

  1. c语言case用花括号吗,关于C#:在switch-case中使用花括号时的’break’语句
  2. 用python计算准确率_有没有计算回归模型准确率的方法?
  3. SwiftUI 精品项目之完整Go围棋游戏App支持在线对战OGS Alamofire SocketIO(教程含源码)
  4. 我在Uber亲历的最严重的工程灾难
  5. 【文献翻译】基于IEEE802.15.4的物联网网络的捕获和威胁感知安全配置策略
  6. 【控制control】机器人运动控制器----基于模型预测控制MPC方法
  7. spring4.x注解
  8. python 写命令行界面_使用Python进行命令行界面编程?
  9. UI设计师必须知道的大厂设计规范
  10. dict.setdefault(key, default=None)