树状数组upc1976

原创 2013年12月03日 19:11:19

1976: problem F

Time Limit: 3 Sec  Memory Limit: 64 MB
Submit: 69  Solved: 10
[Submit][Status][Web Board]

Description

在一个小镇上住着n位武林高手,他们互相之间经常PK,不过PK的时候必须要有一位裁判在场。这个小镇上的房子从1—n依次排列(一条直线上),两个人要单挑时必须到另一个人的家里,让这个人作为裁判,裁判的武功不能同时比两个人低也不能同时比两个人高。由于每个高手都很懒,所以他们走的路程不能比他俩之间的距离远(即只能在他们序号之间高手中选择裁判)。求小镇上最多能进行几场PK。

Input

先输入一个整数T(T<=100),包含T组测试数据,每组数据先输入n(n<=100000),然后后面是n个数,表示n个武林高手的功夫ai,(ai<=100000)。

Output

能够进行的最大场数,每组数据占一行。

Sample Input

231 2 352 2 2 2 2

Sample Output

110

思路:跟poj1990有些相似。
下面是代码:

#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
const int MAX=500010;
struct node
{
    long long x,value;
}a[MAX];
long long n;
long long num[MAX];
bool cmp(node a,node b)
{
    return a.value<b.value;
}
long long sum(long long x)
{
    long long sum=0;
    while(x>0)
    {
        sum+=num[x];
        x-=(x&(-x));
    }
    return sum;
}
void update(long long x,int cnt)
{
    while(x<=n)
    {
        num[x]+=cnt;
        x+=(x&(-x));
    }
}
int main()
{
    //freopen("test2.in","r",stdin);
    int t;
    cin>>t;
    while(t--)
    {
        cin>>n;
        for(long long i=1;i<=n;i++)
        {
            scanf("%lld",&a[i].value);
            a[i].x=i;
        }
        memset(num,0,sizeof(num));
        stable_sort(a+1,a+n+1,cmp);
        long long ans=0;
        for(long long  i=1;i<=n;i++)
        {
            long long x=sum(a[i].x);
            ans+=x*((n-a[i].x)-(i-x-1))+(a[i].x-x-1)*(i-x-1);
            update(a[i].x,1);
        }
        cout<<ans<<endl;
    }
    return 0;
}



版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

树状数组资料

  • 2014年02月18日 22:56
  • 494KB
  • 下载

树状数组简介

  • 2013年08月16日 23:32
  • 3KB
  • 下载

POJ 2352 Stars(树状数组)

F - Stars Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit Statu...
  • s1124yy
  • s1124yy
  • 2016年05月13日 15:49
  • 177

二维树状数组

  • 2013年06月11日 10:48
  • 21KB
  • 下载

二维树状数组ppt

  • 2013年06月18日 13:29
  • 167KB
  • 下载

【树状数组--dfs序转化】poj3321 Apple Tree

Apple Tree Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 29822   Accepted: 8881...

树状数组详解

  • 2014年08月20日 11:33
  • 87KB
  • 下载

国家队 讲义 树状数组应用

  • 2015年04月01日 15:44
  • 620KB
  • 下载

【NOIP2017提高A组集训10.25】天才绅士少女助手克里斯蒂娜(树状数组)

DescriptionInput第一行两个整数n;m 表示电子个数和询问个数. 接下来n 行, 每行两个整数x; y 表示vi. 接下来m 行, 每行形如1 p x y 或2 l r, 分别表示两...

一维和二维树状数组的实现

  • 2008年09月15日 15:39
  • 509B
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:树状数组upc1976
举报原因:
原因补充:

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