1 条题解

  • 0
    @ 2025-2-21 19:59:29

    C++ :

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    using namespace std;
    //求上突。
    
    long long n,a[50001];
    long long c[50001]; 
    long long l[50001],r[50001];
    long long num;
    int lowbit(int x)
    {
    	return x&(-x);
    }
    void add(int pos,int x)
    {
    	for(int i=pos; i<=50000; i+=lowbit(i))
    	{
    		c[i]+=x;
    	}
    }
    long long sum(int pos)
    {
    	long long tot=0;
    	for(int i=pos; i>0; i-=lowbit(i))
    	{
    		tot+=c[i];
    	}
    	return tot;
    }
    
    void init()
    {
    	cin>>n;
    	for(int i=1; i<=n; i++)
    	{
    		cin>>a[i];
    	}
    }
    void work()
    {
    	for(int i=1; i<=n; i++)
    	{
    		l[i]=sum(a[i]);
    		add(a[i]+1,1);
    	}
    	memset(c,0,sizeof(c));
    	for(int i=n; i>=1; i--)
    	{
    		r[i]=sum(a[i]);
    		add(a[i]+1,1);
    	}
    	for(int i=1; i<=n; i++)
    	{
    		num+=l[i]*r[i];
    	}
    	cout<<num;
    } 
    int main()
    {	
    	init();
    	work();
    }
    
    • 1

    信息

    ID
    998
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者