luogup2345奶牛集会

ioioioioioio ioioioioioio     2022-09-24     454

关键词:

题目背景

MooFest, 2004 Open

题目描述

约翰的N 头奶牛每年都会参加“哞哞大会”。哞哞大会是奶牛界的盛事。集会上的活动很

多,比如堆干草,跨栅栏,摸牛仔的屁股等等。它们参加活动时会聚在一起,第i 头奶牛的坐标为Xi,没有两头奶牛的坐标是相同的。奶牛们的叫声很大,第i 头和第j 头奶牛交流,会发出max{Vi; Vj}×|Xi − Xj | 的音量,其中Vi 和Vj 分别是第i 头和第j 头奶牛的听力。假设每对奶牛之间同时都在说话,请计算所有奶牛产生的音量之和是多少。

输入输出格式

输入格式:

 

• 第一行:单个整数N,1 ≤ N ≤ 20000

• 第二行到第N + 1 行:第i + 1 行有两个整数Vi 和Xi,1 ≤ Vi ≤ 20000; 1 ≤ Xi ≤ 20000

 

输出格式:

 

• 单个整数:表示所有奶牛产生的音量之和

 

输入输出样例

输入样例#1: 复制
4
3 1
2 5
2 6
4 3
输出样例#1: 复制
57

说明

朴素O(N2)

类似于归并排序的二分O(N logN)

树状数组O(N logN)

 

zanwujieshi

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <cmath>

using namespace std;

long long n,c[50010],maxn,num[50010],ans;

struct node
{
    long long v,x;
}e[20010];

long long lowbit(long long x)
{
    return x & (-x);
}

void add(long long x,long long d)
{
    while (x <= maxn)
    {
        c[x] += d;
        x += lowbit(x);
    }
}

long long query(long long x)
{
    long long cnt = 0;
    while (x)
    {
        cnt += c[x];
        x -= lowbit(x);
    }
    return cnt;
}

void add2(long long x,long long d)
{
    while (x <= maxn)
    {
        num[x] += d;
        x += lowbit(x);
    }
}

long long query2(long long x)
{
    long long cnt = 0;
    while (x)
    {
        cnt += num[x];
        x -= lowbit(x);
    }
    return cnt;
}

bool cmp(node a,node b)
{
    return a.v < b.v;
}

int main()
{
    scanf("%lld",&n);
    for (int i = 1; i <= n; i++)
    {
    scanf("%lld%lld",&e[i].v,&e[i].x);
    maxn = max(maxn,e[i].x);
    }
    sort(e + 1,e + 1 + n,cmp);
    long long t = 0;
    for (int i = 1; i <= n; i++)
    {
        long long x = e[i].x,v = e[i].v;
        long long x1 = query(x - 1),num1 = query2(x - 1);
        long long num2 = i - 1 - num1,x2 = t - x1;
        t += e[i].x;
        ans += v * (num1 * x - x1 + x2 - num2 * x);
        add(x,x);
        add2(x,1);
    }
    printf("%lld
",ans);

    return 0;
}

 

洛谷p2345奶牛集会

题目背景MooFest,2004Open题目描述约翰的N头奶牛每年都会参加“哞哞大会”。哞哞大会是奶牛界的盛事。集会上的活动很多,比如堆干草,跨栅栏,摸牛仔的屁股等等。它们参加活动时会聚在一起,第i头奶牛的坐标为Xi,没... 查看详情

洛谷p2345奶牛集会

题目背景MooFest,2004Open题目描述约翰的N头奶牛每年都会参加“哞哞大会”。哞哞大会是奶牛界的盛事。集会上的活动很多,比如堆干草,跨栅栏,摸牛仔的屁股等等。它们参加活动时会聚在一起,第i头奶牛的坐标为Xi,没... 查看详情

洛谷p2345奶牛集会

题目背景MooFest,2004Open题目描述约翰的N头奶牛每年都会参加“哞哞大会”。哞哞大会是奶牛界的盛事。集会上的活动很多,比如堆干草,跨栅栏,摸牛仔的屁股等等。它们参加活动时会聚在一起,第i头奶牛的坐标为Xi,没有两头... 查看详情

洛谷p2345奶牛集会

题目背景MooFest,2004Open题目描述约翰的N头奶牛每年都会参加“哞哞大会”。哞哞大会是奶牛界的盛事。集会上的活动很多,比如堆干草,跨栅栏,摸牛仔的屁股等等。它们参加活动时会聚在一起,第i头奶牛的坐标为Xi,没有两头... 查看详情

洛谷p2345奶牛集会

洛谷P2345奶牛集会树状数组按v从小到大排序消除max影响 1#include<bits/stdc++.h>2#defineFor(i,j,k)for(inti=j;i<=k;i++)3#defineDow(i,j,k)for(inti=j;i>=k;i--)4#defineLLlonglong5usingnamespacestd;6inlineintread( 查看详情

p2345奶牛集会andp2657低头一族

做法是一样的题目背景MooFest,2004Open题目描述约翰的N头奶牛每年都会参加“哞哞大会”。哞哞大会是奶牛界的盛事。集会上的活动很多,比如堆干草,跨栅栏,摸牛仔的屁股等等。它们参加活动时会聚在一起,第i头奶牛的坐标为... 查看详情

题解p2345奶牛集会(代码片段)

题目一道树状数组的题。话说题目直接告诉做法是什么鬼?首先这个题直接暴力是(O(n^2))的,不能通过(评论里说可以?可能数据太水了,建议加强)考虑优化,首先对于答案里的(max),可以直接通过排序优化掉,即把数据从小... 查看详情

usaco2004moofest奶牛集会(代码片段)

题目问题描述约翰的n头奶牛每年都会参加“哞哞大会”。哞哞大会是奶牛界的盛事。集会上的活动很多,比如堆干草,跨栅栏,摸牛仔的屁股等等。它们参加活动时会聚在一起,第i头奶牛的坐标为Xi,没有两头奶牛的坐标是相... 查看详情

[usaco]2004openmoofest奶牛集会(代码片段)

题目背景MooFest,2004Open题目描述约翰的N头奶牛每年都会参加“哞哞大会”。哞哞大会是奶牛界的盛事。集会上的活动很多,比如堆干草,跨栅栏,摸牛仔的屁股等等。它们参加活动时会聚在一起,第i头奶牛的坐标为Xi,没有两头... 查看详情

奶牛集会(moofest,usaco2004open)

题目背景MooFest,2004Open题目描述约翰的N头奶牛每年都会参加“哞哞大会”。哞哞大会是奶牛界的盛事。集会上的活动很多,比如堆干草,跨栅栏,摸牛仔的屁股等等。它们参加活动时会聚在一起,第i头奶牛的坐标为Xi,没有两头... 查看详情

luogup1154奶牛分厩[数论]

题目描述农夫约翰有N(1<=N<=5000)头奶牛,每头奶牛都有一个唯一的不同于其它奶牛的编号Si,所有的奶牛都睡在一个有K个厩的谷仓中,厩的编号为0到K-1。每头奶牛都知道自己该睡在哪一个厩中,因为约翰教会... 查看详情

[luogup1578]奶牛浴场(dp)

传送门 O(s2)算法详见论文 王知昆--浅谈用极大化思想解决最大子矩形问题我就复制你能把我怎么样QAQ#include<cstdio>#include<iostream>#include<algorithm>#defineN5010#definemax(x,y)((x)>(y)?(x):(y))#definemin(x,y)((x)& 查看详情

[luogup1868]饥饿的奶牛(dp)

传送门 先把所有区间按照左端点排序f[i]表示区间0~i的最优解 #include<cstdio>#include<iostream>#include<algorithm>#definemax(x,y)((x)>(y)?(x):(y))intn,v;intf[3000001];structnode{ intx,y;}p[150001]; 查看详情

[usaco10mar]伟大的奶牛聚集

[USACO10MAR]伟大的奶牛聚集Bessie正在计划一年一度的奶牛大集会,来自全国各地的奶牛将来参加这一次集会。当然,她会选择最方便的地点来举办这次集会。每个奶牛居住在N(1<=N<=100,000)个农场中的一个,这些农场由N-1条道路... 查看详情

luogup1824进击的奶牛

题目描述FarmerJohn建造了一个有N(2<=N<=100,000)个隔间的牛棚,这些隔间分布在一条直线上,坐标是x1,...,xN(0<=xi<=1,000,000,000)。他的C(2<=C<=N)头牛不满于隔间的位置分布,它们为牛棚里其他的牛的存在而愤怒。为了防止牛... 查看详情

[usaco2010mar]gather奶牛大集会

[Usaco2010Mar]gather奶牛大集会题目Bessie正在计划一年一度的奶牛大集会,来自全国各地的奶牛将来参加这一次集会。当然,她会选择最方便的地点来举办这次集会。每个奶牛居住在N(1<=N<=100,000)个农场中的一个,这些农场由N-1条... 查看详情

luogup2344奶牛抗议(树状数组优化dp)(代码片段)

   传送门 解题思路树状数组优化dp,f[i]表示前i个奶牛的分组的个数,那么很容易得出$f[i]=sumlimits_1leqjleqif[j-1]*(sum[i]gesum[j-1])$,但是这样的时间复杂度是$O(n^2)?$,所以考虑优化,发现必须满足$sum[i]gesum[j-1]?$才能进... 查看详情

[luogup1472]奶牛家谱cowpedigrees(dp)

传送门 一个深度为i的树可以由一个根节点外加两个深度为i-1的树组成,这就决定了DP该怎么写。然而我真的没有想到。 f[i][j]表示深度为i节点数为j的个数sum[i][j]表示深度小于等于i节点树为j的个数 #include<cstdio>#de... 查看详情