hdu 5792 World is Exploding 树状数组
生活随笔
收集整理的這篇文章主要介紹了
hdu 5792 World is Exploding 树状数组
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
World is Exploding
題目連接:
http://acm.hdu.edu.cn/showproblem.php?pid=5792
Description
Given a sequence A with length n,count how many quadruple (a,b,c,d) satisfies: a≠b≠c≠d,1≤a<b≤n,1≤c<d≤n,Aa<Ab,Ac>Ad.Input
The input consists of multiple test cases.
Each test case begin with an integer n in a single line.
The next line contains n integers A1,A2?An.
1≤n≤50000
0≤Ai≤1e9
Output
For each test case,output a line contains an integer.
Sample Input
4
2 4 1 3
4
1 2 3 4
Sample Output
1
0
Hint
題意
給你n個數,問你有多少個四元組,滿足a!=b,b!=c,c!=d,a!=d,a!=c,b!=d,且A[a]<A[b],a<b,A[c]>A[d],c<d的關系的。題解:
考慮容斥,我們知道(a,b)的對數,(c,d)的對數,兩個乘起來,再減去不合法的就好了。不合法的,顯然就是長度為3的哪些重復計算的,只要減去就好了。維護l[i]表示前面有多少個比他小,l1[i]前面有多少個比他大r[i]后面有多少個比他小,r1[i]有多少個比他大然后莽一波容斥。代碼
#include<bits/stdc++.h> using namespace std; const int maxn = 5e4+7; int d[maxn],n,a[maxn],l[maxn],r[maxn],l1[maxn],r1[maxn];; int lowbit(int x){return x&(-x); } void update(int x,int v){for(int i=x;i<maxn;i+=lowbit(i))d[i]+=v; } int get(int x){int ans = 0;for(int i=x;i;i-=lowbit(i))ans+=d[i];return ans; } map<int,int>H; vector<int> V; int main(){while(scanf("%d",&n)!=EOF){memset(l1,0,sizeof(l1));memset(r1,0,sizeof(r1));memset(l,0,sizeof(l));memset(r,0,sizeof(r));memset(d,0,sizeof(d));V.clear();H.clear();for(int i=1;i<=n;i++){scanf("%d",&a[i]);V.push_back(a[i]);}sort(V.begin(),V.end());V.erase(unique(V.begin(),V.end()),V.end());for(int i=0;i<V.size();i++)H[V[i]]=i+1;for(int i=1;i<=n;i++)a[i]=H[a[i]];long long ans1=0,ans2=0,ans3=0;for(int i=1;i<=n;i++){l[i]=get(a[i]-1);l1[i]=get(maxn-1)-get(a[i]);update(a[i],1);}memset(d,0,sizeof(d));for(int i=n;i>=1;i--){r[i]=get(a[i]-1);r1[i]=get(maxn-1)-get(a[i]);update(a[i],1);}for(int i=1;i<=n;i++){ans3+=1ll*l[i]*r[i];ans3+=1ll*l1[i]*r1[i];ans3+=1ll*l[i]*l1[i];ans3+=1ll*r[i]*r1[i];ans1+=l[i],ans2+=r[i];}cout<<ans1*ans2-ans3<<endl;} }轉載于:https://www.cnblogs.com/qscqesze/p/5730435.html
總結
以上是生活随笔為你收集整理的hdu 5792 World is Exploding 树状数组的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【收藏】哪些比较好的在线编程网站?
- 下一篇: 100万并发连接服务器笔记之处理端口数量