zoukankan      html  css  js  c++  java
  • 18.12.20 DSA 重要逆序对

    描述

    给定N个数的序列a1,a2,...aN,定义一个数对(ai, aj)为“重要逆序对”的充要条件为 i < j 且 ai > 2aj。求给定序列中“重要逆序对”的个数。

    输入

    第一行为序列中数字的个数N(1 ≤ N ≤ 200000)。
    第二行为序列a1, a2 ... aN(0 ≤a ≤ 10000000),由空格分开。输出输出一个整数,为给序列中“重要逆序对”的个数。

    样例输入

    10
    0 9 8 7 6 5 4 3 2 1
    

    样例输出

    16
    

    提示

    如果使用printf输出long long类型,请用%lld
    数据范围
    对于40%的数据,有N ≤ 1000。

     1 #include <iostream>
     2 #include <string.h>
     3 #include <algorithm>
     4 #include <stack>
     5 #include <string>
     6 #include <math.h>
     7 #include <queue>
     8 #include <stdio.h>
     9 #include <string.h>
    10 #include <set>
    11 #include <vector>
    12 #include <fstream>
    13 #define maxn 200005
    14 #define inf 999999
    15 #define cha 127
    16 #define eps 1e-6
    17 using namespace std;
    18 
    19 long long ans;
    20 long num[maxn],tmp[maxn];
    21 int n;
    22 
    23 void mysort(int left,int right) {
    24     if (left == right)return;
    25     int mid = (left + right) / 2;
    26     mysort(left, mid), mysort(mid + 1, right);
    27     int i = left, j = mid + 1, p = left, t = left;
    28     while (i <= mid && j <= right) {
    29         if (num[i] <= num[j])
    30             tmp[p++]=num[i++];
    31         else {
    32             while (num[t] <= 2 * num[j]&&t<=mid)
    33                 t++;
    34             if (num[t] > 2 * num[j])
    35                 ans += mid - t + 1;
    36             tmp[p++] = num[j++];
    37         }
    38     }
    39     while (i <= mid)
    40         tmp[p++] = num[i++];
    41     while (j <= right)
    42         tmp[p++] = num[j++];
    43     for (int i = left; i <= right; i++)
    44         num[i] = tmp[i];
    45 }
    46 
    47 void init() {
    48     scanf("%d", &n);
    49     for (int i = 1; i <= n; i++)
    50         scanf("%ld", &num[i]);
    51     mysort(1, n);
    52     printf("%lld
    ", ans);
    53 }
    54 
    55 int main() {
    56     init();
    57     return 0;
    58 }
    View Code

    好像是把maxn写错了一直TLE……哭了

    用同一个指针变量指示有点难想

    注定失败的战争,也要拼尽全力去打赢它; 就算输,也要输得足够漂亮。
  • 相关阅读:
    hdu 2485 Destroying the bus stations 迭代加深搜索
    hdu 2487 Ugly Windows 模拟
    hdu 2492 Ping pong 线段树
    hdu 1059 Dividing 多重背包
    hdu 3315 My Brute 费用流,费用最小且代价最小
    第四天 下载网络图片显示
    第三天 单元测试和数据库操作
    第二天 布局文件
    第一天 安卓简介
    Android 获取存储空间
  • 原文地址:https://www.cnblogs.com/yalphait/p/10150693.html
Copyright © 2011-2022 走看看