• AW241 楼兰图腾


    题目地址


    易错点:

    • 获取较小值时注意要使用a[i]-1(相等的不能用于计数).

    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #define ll long long
    using namespace std;
    const int MAXN=200006;
    int lowbit(int x){
    	return x&-x;
    }
    int n;
    int tr[MAXN];
    void add(int x,int val){
    	while(x<=n){
    		tr[x]+=val;
    		x+=lowbit(x);
    	}
    }
    int ask(int x){
    	int ans=0;
    	while(x){
    		ans+=tr[x];
    		x-=lowbit(x);
    	}
    	return ans;
    }
    void reset(){
    	memset(tr,0,sizeof(tr));
    }
    int a[MAXN],l[MAXN],r[MAXN];
    int main(){
    	scanf("%d",&n);
    	for(int i=1;i<=n;i++){
    		scanf("%d",&a[i]);
    	}
    	//get sum1
    	for(int i=1;i<=n;i++){
    		l[i]=ask(n)-ask(a[i]);
    		add(a[i],1);
    	}
    	reset();
    	for(int i=n;i;i--){
    		r[i]=ask(n)-ask(a[i]);
    		add(a[i],1);
    	}
    	ll sum1=0;
    	for(int i=1;i<=n;i++){
    		sum1+=(ll)l[i]*r[i];
    	}
    	//get sum2
    	reset();
    	for(int i=n;i;i--){
    		l[i]=ask(a[i]-1);
    		add(a[i],1);
    	}
    	reset();
    	for(int i=1;i<=n;i++){
    		r[i]=ask(a[i]-1);
    		add(a[i],1);
    	}
    	ll sum2=0;
    	for(int i=1;i<=n;i++){
    		sum2+=(ll)l[i]*r[i];
    	}
    	printf("%lld %lld
    ",sum1,sum2);
    	return 0;
    }
  • 相关阅读:
    常用查询mysql
    java Scanner
    存储过程
    使用IDEA打jar包
    创建一个jmeter的外部jar包
    关于jmeter
    Anaconda
    IDEA中使用IdeaVim
    爬虫之scrapy框架
    爬虫之图形验证码识别技术
  • 原文地址:https://www.cnblogs.com/zbsy-wwx/p/11680543.html
Copyright © 2020-2023  润新知