博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UVA 1428 Ping pong
阅读量:5362 次
发布时间:2019-06-15

本文共 1371 字,大约阅读时间需要 4 分钟。

树状数组

枚举裁判位置,设裁判为第i 个人,左边有l[i]个比他小的选手,右边有r[i]个比他小的选手;

令c[i]表示技能值为i 的人是否存在,计算l[i] 即c[1]~c[i-1]的和,计算l[i]后使c[a[i]]=1;同理求r[i];

 

1 #include 
2 #include
3 #include
4 using namespace std; 5 6 const int maxn = 100005; 7 8 int n; 9 int a[maxn];10 long long c[maxn];11 long long l[maxn],r[maxn];12 13 int lowbit (int x){14 return x&(-x);15 }16 17 void add (int x,long long d){18 while (x<=maxn-5){  //这里是我坑了很久的地方。。。这里的边界是技能值边界。。。19 c[x]+=d;20 x+=lowbit(x);21 }22 }23 24 long long sum (int x){25 long long ans=0;26 while (x>0){27 ans+=c[x];28 x-=lowbit(x);29 }30 return ans;31 }32 33 int main (){34 int t; //while (cin>>t) cout<
<
>t;36 while (t--){37 cin>>n;38 for (int i=1;i<=n;i++){39 cin>>a[i];40 }41 memset (c,0,sizeof c);42 for (int i=1;i<=n;i++){43 l[i]=sum(a[i]);44 add (a[i],1);45 }46 memset (c,0,sizeof c);47 for (int i=n;i>=1;i--){48 r[i]=sum(a[i]);49 add (a[i],1);50 }51 long long ans=0;52 for (int i=1;i<=n;i++)53 ans+=l[i]*(n-i-r[i])+(i-l[i]-1)*r[i];//cout<
<<" "<
<

 

转载于:https://www.cnblogs.com/gfc-g/p/3890493.html

你可能感兴趣的文章
表单中的readonly与disable的区别(zhuan)
查看>>
win10下安装配置mysql-8.0.13--实战可用
查看>>
周记2018.8.27~9.2
查看>>
MySQL中 1305-FUNCTION liangshanhero2.getdate does not exit 问题解决
查看>>
Ctrl+Alt+Down/Up 按键冲突
查看>>
python序列化和json
查看>>
mongodb
查看>>
网格与无网格
查看>>
2018年3月份
查看>>
SSH-struts2的异常处理
查看>>
《30天自制操作系统》学习笔记--第14天
查看>>
LGPL协议的理解
查看>>
1、Python基础
查看>>
Unity The Tag Attribute Matching Rule
查看>>
试着理解下kvm
查看>>
WebService学习总结(二)--使用JDK开发WebService
查看>>
Tizen参考手机RD-210和RD-PQ
查看>>
竞价广告系统-位置拍卖理论
查看>>
策略模式 C#
查看>>
[模板]树状数组
查看>>