zoukankan      html  css  js  c++  java
  • poj 3298 数状数组

    http://poj.org/problem?id=3928

    题目大意是一条大街上住着n个乒乓球爱好者,他们的水平高低用一个数值表示,他们经常举办比赛,比赛要三个人,一人当裁判。对裁判是有一定要求的,裁判的水平必须介于两选手之间且必须住他们中间,计算可以举办多少场比赛


    #include<stdio.h>
    #include<string.h>
    #define maxn 100005
    int c[20050];                  //存放比比第i个人技能值低的人数 
    int xt[200050];                //树状数组
    int a[10050];                  //存放每个人的技能值
    int n;
    
    int lowbit(int x)
    {
    	return x & (-x);
    }
    //一看到这个函数就知道是树状数组
    
    void update(int x)
    {
    	while(x <= maxn)
    	{
    		xt[x] += 1;
    		x += lowbit(x);
    	}
    }
    //每次更新节点的时候只增加1
    
    int sum(int x)
    {
    	int s = 0;
    	while(x > 0)
    	{
    		s += xt[x];
    		x -= lowbit(x);
    	}
    	return s;
    } 
    //因为更新的时候数组元素的值只增加了1,所以返回的值是小于等于x的数的个数
    
    
    int main()
    {
    	int i, j, t;
    	__int64  ans;
    	//结果的可能值超出1<<32, 开始wa了一次
    
    	scanf("%d",&t);
    	while(t--)
    	{
    		memset(c,0,sizeof(c));
    		memset(xt,0,sizeof(xt));
    		scanf("%d",&n);
    		for(i = 1;i <= n;i++)
    		{
    			scanf("%d",&a[i]);
    			update(a[i]);
    			c[i] = sum(a[i] - 1);                          
    			//因为可能有多个人的技能值是相同的,所以不能在最后计算i的左边比a[i]小的人数
    
    		}
    		ans = 0;
    		//别忘了初始化
    
    		//我考虑第i个人做裁判的时候可能的比赛,累加得结果
    		for(i = 2;i < n;i++)
    		{
    			ans += (c[i]) * ((n - i) - (sum(a[i]) - c[i] - 1));
    			//当i做裁判时i左边有c[i]人小于a[i](前面已经计算出来了),sum(a[i]) - c[i] - 1)是i的右边比a[i]大的人数  
    
    			ans += (i - 1 - c[i]) * (sum(a[i]) - c[i] - 1);
    			//在i 的左边比a[i]大的有i - 1 - c[i]人,(sum(a[i]) - c[i] - 1)是i右边比a[i]大的人数
    
    		}
    		printf("%I64d\n",ans);
    	}
    	return 0;
    }


  • 相关阅读:
    spark 读取mongodb失败,报executor time out 和GC overhead limit exceeded 异常
    在zepplin 使用spark sql 查询mongodb的数据
    Unable to query from Mongodb from Zeppelin using spark
    spark 与zepplin 版本兼容
    kafka 新旧消费者的区别
    kafka 新生产者发送消息流程
    spark ui acl 不生效的问题分析
    python中if __name__ == '__main__': 的解析
    深入C++的new
    NSSplitView
  • 原文地址:https://www.cnblogs.com/xindoo/p/3595128.html
Copyright © 2011-2022 走看看