Codeforces911D---Inversion Counting

原创 2018年04月17日 11:05:33

img

题目大意:

给你 n 个数,和 m 个操作询问,每个询问给你 l,r 两个数,问你反转 l,r 区间的元素后,整个序列的逆序对的个数是奇数个还是偶数个,奇数个输出 odd ,偶数个则输出 even ,该逆序对以从小到大为标准次序,反转后不会恢复为原序列,且保证 n 个数中每个数都不相同。

数据范围

1n1500,1m2105,1lirin,1ain;

解题思路:

因为要求每次操作后逆序对的对数的奇偶性,如果想暴力做的话,每次对序列进行反转就是 O(n) 的复杂度,还得重新求总逆序对个数,总复杂度就变为了 O(n2m) ,这显然会 TLE 的,所以得换个想法,我们先求出初始序列的总逆序对个数 res ,根据 [l,r] 区间逆序对的变化转换为总逆序对个数,但是真正的个数我们其实并不太需要,只需要知道奇偶性就行了;我们知道一个长度为len长的序列,它的逆序对最多为 len(len1)/2 (假如该序列为从大到小排序,即总逆序对个数为 (1+2+3++(len1)=len(len1)/2) 暂且称为满逆序对,那么现逆序对个数即与满逆序对个数有关,若满逆序对个数为偶数个,那么现逆序对奇偶性与原逆序对相同,即为加减偶数个数,可以用 len(len1)/2 代替,否则当满逆序对个数为奇数个时,那么现逆序对奇偶性与原逆序对相反,即为加减奇数个,也可用 len(len1)/2 代替,所以每次只需要将 res+=len(len1)/2 后就可以直接判断奇偶性,O(1) 出答案。

AC代码

#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<algorithm>
using namespace std;
const int maxn = 1500;
int n, m, cnt;
int a[maxn + 5];
int main() {
    scanf("%d", &n);
    for(int i = 1; i <= n; i++)scanf("%d", &a[i]);
    for(int i = 1; i <= n; i++) {
        for(int j = i + 1; j <= n; j++)
            if(a[i] > a[j])cnt++;
    }
    scanf("%d", &m);
    for(int i = 1; i <= m; i++) {
        int l, r;
        scanf("%d%d", &l, &r);
        cnt += (r - l + 1) * (r - l) / 2;
        if(cnt & 1)printf("odd\n");
        else printf("even\n");
    }
    return 0;
}

题目链接:Go to!

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/dreams___/article/details/79971878

pat1004Counting Leaves (30)

题意分析: (1)给出树中节点的总数以及非叶子节点的总数,并给出各非叶子节点的编号、其孩子节点的个数、其孩子节点的编号,求出每一层叶子节点的个数 (2)题意是求出每一层的叶子结点数,其次给出的节点的父...
  • LostStephon
  • LostStephon
  • 2015-10-02 14:32:01
  • 741

A - Lake Counting解题报告

A - Lake Counting Time Limit:1000MS    Memory Limit:65536KB    64bit IO Format:%I64d & %I64u Desc...
  • kydkong
  • kydkong
  • 2014-01-15 11:42:15
  • 671

Codeforce 189B——Counting Rhombi

题意:给定一个矩形的长和宽,求这个矩形里有多少个菱形(可重叠)。 思路:规律题。小学3年级的练习题,直接找有多少的偶数对角线(横纵相乘),两重循环,暴力即可。 code: #in...
  • bobodem
  • bobodem
  • 2016-03-31 20:19:50
  • 446

Counting Stars 全中国最准确的翻译!

最近听到Counting Stars这首歌,觉得歌词屌爆了。然后去网上找了找中文翻译,没想到所有我看到的版本都把这首歌翻成了情歌.......还有很多版本的英文歌词都是错的,反正我就没发现全对的。 ...
  • developer_biao
  • developer_biao
  • 2014-07-14 00:29:52
  • 2799

zoj 1629 - Counting Triangles

题目:统计三角形个数。 分析:dp,数学公式。            递推公式:            正面:f[n] = f[n-1] + n*(n+1)/2 = f[n-1] + n*n/2 + ...
  • mobius_strip
  • mobius_strip
  • 2014-09-16 08:43:53
  • 1338

逆序数个数 (Inversion Counting) - Merge and Sort

普林斯顿的算法课质量很赞,这次作业中涉及到一个"逆序数"的知识,正好在之前学习mergesort时有一道课后提供的面试题与之相关,于是试着实现了。 原题链接:http://www.practice....
  • Jason_Ranger
  • Jason_Ranger
  • 2016-09-22 00:07:21
  • 949

1290 Counting Diff Pairs

1290 Counting Diff Pairs 题目来源: Spoj 基准时间限制:4 秒 空间限制:131072 KB 分值: 320 难度:7级算法题 收藏 ...
  • ZSGG_ACM
  • ZSGG_ACM
  • 2015-12-11 13:37:39
  • 603

pat 1004 Counting Leaves (30)

A family hierarchy is usually presented by a pedigree tree. Your job is to count those family member...
  • hyf20144055065
  • hyf20144055065
  • 2016-07-19 16:17:26
  • 359

PAT甲级 1004.Counting Leaves (30) 题目翻译与答案

1004.计算叶子个数 一个家庭的层级结构经常被表现为一个家谱树。你的任务是统计这些家庭成员中谁没有孩子。 输入 每个输入文件包含一个测试实例。每个实例开始的一行包含N和M,N指树中的结点个数(0...
  • qq278672818
  • qq278672818
  • 2017-02-07 20:29:53
  • 970

Triangle Counting

Description Problem G Triangle Counting Input: Standard Input Output: Standard Output   ...
  • u013776243
  • u013776243
  • 2014-07-08 17:01:33
  • 458
收藏助手
不良信息举报
您举报文章:Codeforces911D---Inversion Counting
举报原因:
原因补充:

(最多只允许输入30个字)