zoukankan      html  css  js  c++  java
  • Luogu P2345 奶牛集会


    Luogu P2345 奶牛集会

    解析

    • 先按照奶牛的听力从小到大排序,这样可以保证我们处理第 i 头奶牛时,已经处理过的奶牛都用这头奶牛的听力作为音量基础值
    • 然后用两个树状数组分别维护数量和坐标之和,然后处理答案即可,具体看代码

    Code

    #include<cmath>
    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #define LL long long
    using namespace std;
    const int N=20005;
    struct cow
    {
    	int v,x;
    }c[N];
    int n;
    LL ans,ctr[2][N];
    bool cmp(cow a,cow b)
    {
    	if(a.v==b.v) return a.x<b.x;
    	else return a.v<b.v;
    }
    int lowbit(int u)
    {
    	return u&(-u);
    }
    void update(int u,int w,int id)
    {
    	for(;u<=20000;u+=lowbit(u)) ctr[id][u]+=w;
    	return;
    }
    LL query(int u,int id)
    {
    	LL res=0;
    	for(;u;u-=lowbit(u)) res+=ctr[id][u];
    	return res;
    }
    int main()
    {
    	scanf("%d",&n);
    	for(int i=1;i<=n;i++) scanf("%d%d",&c[i].v,&c[i].x);
    	sort(c+1,c+n+1,cmp);
    	for(int i=1;i<=n;i++)
    	{
    		update(c[i].x,1,0);
    		update(c[i].x,c[i].x,1);
    		LL bef=query(c[i].x,0)*c[i].x-query(c[i].x,1);
    		LL beh=query(20000,1)-query(c[i].x,1)-(i-query(c[i].x,0))*c[i].x;
    		ans+=c[i].v*(bef+beh);
    	}
    	printf("%lld
    ",ans);
    	return 0;
    }
    
  • 相关阅读:
    C语言第九节 函数指针
    C语言第七节 指针
    C语言第五节 函数
    C语言第六节 结构体
    C语言第四节 数组
    C语言第三节 循环结构
    C语言第二节 分支结构
    ARC、MRC混编
    Git 和 SVN之间的五个基本区别
    KZ--NSString、NSMutableString
  • 原文地址:https://www.cnblogs.com/Hawking-llfz/p/11603649.html
Copyright © 2011-2022 走看看