zoukankan      html  css  js  c++  java
  • 蓝桥杯 历届试题 小朋友排队 【树状数组】+【逆序数】

      历届试题 小朋友排队  
    时间限制:1.0s   内存限制:256.0MB
        
    问题描写叙述
      n 个小朋友站成一排。

    如今要把他们按身高从低到高的顺序排列。可是每次仅仅能交换位置相邻的两个小朋友。



      每一个小朋友都有一个不高兴的程度。

    開始的时候,全部小朋友的不高兴程度都是0。

      假设某个小朋友第一次被要求交换,则他的不高兴程度添加1,假设第二次要求他交换。则他的不高兴程度添加2(即不高兴程度为3),依次类推。

    当要求某个小朋友第k次交换时,他的不高兴程度添加k。

      请问。要让全部小朋友按从低到高排队,他们的不高兴程度之和最小是多少。



      假设有两个小朋友身高一样,则他们谁站在谁前面是没有关系的。

    输入格式
      输入的第一行包括一个整数n,表示小朋友的个数。


      第二行包括 n 个整数 H1 H2 … Hn,分别表示每一个小朋友的身高。

    输出格式
      输出一行,包括一个整数,表示小朋友的不高兴程度和的最小值。
    例子输入
    3
    3 2 1
    例子输出
    9
    例子说明
      首先交换身高为3和2的小朋友,再交换身高为3和1的小朋友,再交换身高为2和1的小朋友,每一个小朋友的不高兴程度都是3,总和为9。

    数据规模和约定
      对于10%的数据, 1<=n<=10;
      对于30%的数据, 1<=n<=1000;
      对于50%的数据, 1<=n<=10000。
      对于100%的数据。1<=n<=100000。0<=Hi<=1000000。
    统计一下每个数的左边比他大的数目。以及右边比他小的数目,计算一下。

    代码:

    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <iostream>
    #define LL long long
    const int M = 1e6+5;
    using namespace std;
    
    LL c[M], sum[M], a[M], b[M], c2[M];
    
    LL bit(LL x){
    	return x & -x;
    }
    void add(LL x){
    	while(x < M){
    		c[x]++;
    		x += bit(x);
    	}
    }
    
    LL getsum(LL x){
    	LL sum = 0;
    	while(x){
    		sum += c[x];
    		x -= bit(x);
    	}
    	return sum;
    }
    
    int main(){
    	LL n, i;
    	cin >> n;
    	for(i = 1; i < M; ++ i) sum[i] = sum[i-1]+i;
    	for(i = 0; i < n; ++ i){  //当前点跟左边点形成的逆序对数 
    		cin >> a[i];  //确保每一个点都被更新
    		add(a[i]+1);
    		b[i] = i+1-getsum(a[i]+1);
    	}
    	memset(c, 0, sizeof(c));
    	LL res = 0;
    	for(int i = n-1; i >= 0; -- i){ //当前点跟右边点形成的逆序对数 
    		add(a[i]+1);
    		res += sum[b[i]+getsum(a[i])];		
    	}
    	cout <<res <<endl;
    	return 0;
    } 



  • 相关阅读:
    理解java的三大特性之封装
    Spring_事务-注解代码
    Spring_使用 NamedParameterJdbcTemplate
    C#多线程简单例子讲解
    C#多线程编程
    ASP.NET MVC 的URL路由介绍
    NHibernate二级缓存(第十一篇)
    NHibernate之配置文件属性说明
    NHibernate之映射文件配置说明
    NHibernate 延迟加载与立即加载 (第七篇)
  • 原文地址:https://www.cnblogs.com/yjbjingcha/p/6902394.html
Copyright © 2011-2022 走看看