UVA 1428 - Ping pong(树状数组)
2017-09-08 10:35
316 查看
题目大意:
一条大街上住着n个乒乓球爱好者,经常比赛切磋技术。每个人都有一个不同的技能值a[i];每场比赛需要3个人:两名选手,一名裁判。他们有个奇怪的约定,裁判必须住在两名选手之间,而裁判的能力值也必须在两名选手之间。问一共能组织多少种比赛。
分析:
假设a[1]到a[i-1]中小于a[i]的数有p[i],a[i+1]到a
中小于a[i]的数有s[i]个;
这样当i为裁判时能够组织的比赛数目为:p[i]*(n-i-s[i]) + (i-1-p[i])*s[i];
AC源码:
一条大街上住着n个乒乓球爱好者,经常比赛切磋技术。每个人都有一个不同的技能值a[i];每场比赛需要3个人:两名选手,一名裁判。他们有个奇怪的约定,裁判必须住在两名选手之间,而裁判的能力值也必须在两名选手之间。问一共能组织多少种比赛。
分析:
假设a[1]到a[i-1]中小于a[i]的数有p[i],a[i+1]到a
中小于a[i]的数有s[i]个;
这样当i为裁判时能够组织的比赛数目为:p[i]*(n-i-s[i]) + (i-1-p[i])*s[i];
AC源码:
#include <iostream> #include <cstring> #include <cstdio> #define LOCA using namespace std; typedef long long LL; const int maxn=1e5+10; const int N=2e4+10; LL L[maxn],R[maxn]; LL C[maxn],A[maxn]; LL T,n; int sum(int i) { LL ret=0; while(i>0){ ret+=C[i];i-=i&(-i); } return ret; } void add(int i,int d) { while(i<maxn){ C[i]+=d;i+=i&(-i); } } int main() { #ifdef LOCAL freopen("data.in","r",stdin); freopen("data.out","w",stdout); #endif cin.sync_with_stdio(false); cin>>T; while(T--){ memset(C,0,sizeof(C)); cin>>n; for(int i=1;i<=n;++i) cin>>A[i]; for(int i=1;i<=n;++i){ add(A[i],1); L[i]=sum(A[i]-1); } memset(C,0,sizeof(C)); for(int i=n;i>=1;--i){ add(A[i],1); R[i]=sum(A[i]-1); } long long ans=0; for(int i=1;i<=n;++i) ans+=L[i]*(n-i-R[i])+(i-1-L[i])*R[i]; cout<<ans<<endl; } return 0; }
相关文章推荐
- uva 1428 - Ping pong(树状数组)
- UVA1428 Ping pong(树状数组)
- UVA 1428 Ping Pong(树状数组)
- uva 1428 - Ping pong (树状数组的应用)
- Uva 1428 Ping pong (树状数组,Fenwick树)
- UVA 1428 - Ping pong(树状数组)
- uva 1428 - Ping pong(树状数组)
- Beijing 2008 / UVa 1428 / POJ 3928 / HDU 2492 Ping pong (树状数组)
- [树状数组]Ping Pong, Beijing 2008, Uva1428
- uva 1428 - Ping pong(树状数组,4级)
- uva 1428 - Ping pong(树状数组,4级)
- UVA1428 Ping pong(树状数组)
- UVA 1428 - Ping pong(树状数组)
- UVA1428 Ping pong(树状数组)
- uva 1428 Ping pong (树状数组)
- UVA-1428 - Ping pong(树状数组)
- UVa:1428 Ping pong (树状数组)
- UVA1428 - Ping pong(树状数组)
- 【uva】1428 - Ping pong(树状数组)
- uvalive 4329 Ping Pong(树状数组)