二次联通门 : luogu P2345 奶牛集会

/*
luogu P2345 奶牛集会 权值线段树 以坐标为下标, 坐标为值建立线段树 对奶牛按听力由小到大排序 对于要查的牛
每次第i次放入奶牛起作用的v就是vi;   每次ans+=(xi*sum-sumxl)*vi+(sumxr-xi*sum)*vi */
#include <algorithm>
#include <cstdio> #define Max 400003 void read (int &now)
{
now = ;
register char word = getchar ();
while (word < '' || word > '')
word = getchar ();
while (word >= '' && word <= '')
{
now = now * + word - '';
word = getchar ();
}
} inline int min (int a, int b)
{
return a < b ? a : b;
} inline int max (int a, int b)
{
return a > b ? a : b;
} inline int abs (int a)
{
return a > ? a : -a;
} struct Segment_Tree_Data
{
Segment_Tree_Data *Left, *Right; int l, r;
int key;
int Mid;
int Count; Segment_Tree_Data ()
{
Mid = ;
Left = Right = NULL;
key = ;
Count = ;
}
}
*Root; class Segment_Tree_Type
{
public : void Build (Segment_Tree_Data *&now, int l, int r)
{
now = new Segment_Tree_Data ();
now->l = l;
now->r = r;
if (l == r)
return ;
now->Mid = l + r >> ;
Build (now->Left, l, now->Mid);
Build (now->Right, now->Mid + , r);
} void Updata (Segment_Tree_Data *&now, int pos, int to)
{
if (now->l == now->r)
{
now->key += to;
now->Count++;
return ;
}
if (pos <= now->Mid)
Updata (now->Left, pos, to);
else
Updata (now->Right, pos, to);
now->key = now->Left->key + now->Right->key;
now->Count = now->Left->Count + now->Right->Count;
} int Query (Segment_Tree_Data *&now, int l, int r)
{
if (l <= now->l && r >= now->r)
return now->key;
int res = ;
if (l <= now->Mid)
res += Query (now->Left, l, min (now->Mid, r));
if (r > now->Mid)
res += Query (now->Right, max (now->Mid + , l), r);
return res;
} int Query_number_Count (Segment_Tree_Data *&now, int l, int r)
{
if (l <= now->l && r >= now->r)
return now->Count;
int res = ;
if (l <= now->Mid)
res += Query_number_Count (now->Left, l, min (now->Mid, r));
if (r > now->Mid)
res += Query_number_Count (now->Right, max (now->Mid + , l), r);
return res;
}
}; int N; Segment_Tree_Type Tree; struct Cow_Data
{
int pos;
int value; bool operator < (const Cow_Data &now) const
{
return now.value > value;
} }; Cow_Data cow[Max]; int main (int argc, char *argv[])
{
read (N);
int pos, Value;
long long Answer = ;
Tree.Build (Root, , Max);
for (int i = ; i <= N; i++)
{
read (cow[i].value);
read (cow[i].pos);
}
std :: sort (cow + , cow + + N);
Tree.Updata (Root, cow[].pos, cow[].pos);
for (int i = ; i <= N; i++)
{
Tree.Updata (Root, cow[i].pos, cow[i].pos);
register long long now = Tree.Query_number_Count (Root, , cow[i].pos - );
Answer += (long long) cow[i].value * (cow[i].pos * now - Tree.Query (Root, , cow[i].pos - ));
Answer += (long long) cow[i].value * (Tree.Query (Root, cow[i].pos + , Max) - cow[i].pos * (i - now - ));
} printf ("%lld", Answer);
return ;
}

luogu P2345 奶牛集会的更多相关文章

  1. luogu P2345 奶牛集会 |排序+树状数组

    题目描述 约翰的N 头奶牛每年都会参加"哞哞大会".哞哞大会是奶牛界的盛事.集会上的活动很多,比如堆干草,跨栅栏,摸牛仔的屁股等等.它们参加活动时会聚在一起,第i 头奶牛的坐标为X ...

  2. 洛谷 P2345 奶牛集会 解题报告

    P2345 奶牛集会 题目背景 MooFest, 2004 Open 题目描述 约翰的N 头奶牛每年都会参加"哞哞大会".哞哞大会是奶牛界的盛事.集会上的活动很 多,比如堆干草,跨 ...

  3. 洛谷 P2345 奶牛集会

    https://www.luogu.org/problem/show?pid=2345 题目描述 约翰的N 头奶牛每年都会参加“哞哞大会”.哞哞大会是奶牛界的盛事.集会上的活动很 多,比如堆干草,跨栅 ...

  4. 洛谷P2345 奶牛集会

    题目背景 MooFest, 2004 Open 题目描述 约翰的N 头奶牛每年都会参加“哞哞大会”.哞哞大会是奶牛界的盛事.集会上的活动很 多,比如堆干草,跨栅栏,摸牛仔的屁股等等.它们参加活动时会聚 ...

  5. p2345 奶牛集会

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

  6. P2345 奶牛集会andP2657 低头一族

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

  7. AC日记——奶牛集会 洛谷 P2345

    奶牛集会 思路: 把奶牛按照v排序: 然后,每次都把奶牛放入一个集合s: 因为奶牛已经排序: 所以,每次第i次放入奶牛起作用的v就是vi: 每次ans+=(xi*sum-sumxl)*vi+(sumx ...

  8. usaco 奶牛集会 && 奶牛抗议

    奶牛集会 Description 约翰家的N头奶牛每年都会参加“哞哞大会” .哞哞大会是世界奶牛界的盛事.集会上 的活动很多,比如堆干草,跨栅栏,摸牛仔的屁股等等.当然,哞哞大叫肯定也包括在内. 奶牛 ...

  9. 【树状数组】【P2345】 奶牛集会

    传送门 Description 约翰的\(N\)头奶牛每年都会参加"哞哞大会".哞哞大会是奶牛界的盛事.集会上的活动很多,比如堆干草,跨栅栏,摸牛仔的屁股等等.它们参加活动时会聚在 ...

随机推荐

  1. Scala 面向对象编程之类

    定义一个简单的类 // 定义类,包含field以及方法 class HelloWorld { private var name = "leo" def sayHello() { p ...

  2. Codeforces Round #563 Div. 2

    A:显然排序即可. #include<bits/stdc++.h> using namespace std; #define ll long long #define inf 100000 ...

  3. 禁止服务向 eureka 上注册配置文件

    ### 禁止向注册中心注册服务eureka.client.register-with-eureka=false

  4. kvm第三章--虚拟化存储管理

  5. axios配置及使用(发起请求时带上token)

    1.安装 利用npm安装 npm install axios --save 2.引入即可使用 import axios from 'axios' 3.目录 4.各个文件设置: (1)env.js ex ...

  6. HTML的发展历史

    HTML是Web统一语言,这些容纳在尖括号里的简单标签,构成了如今的Web,1991年,Tim Berners-Lee编写了一份叫做“HTML标签”的文档,里面包含了大约20个用来标记网页的HTML标 ...

  7. https、加密安全

    1.Https HTTPS在传输的过程中会涉及到三个密钥: 服务器端的公钥和私钥,用来进行非对称加密 客户端生成的随机密钥,用来进行对称加密 一个HTTPS请求实际上包含了两次HTTP传输,可以细分为 ...

  8. linux驱动开发随手记【1】

    1.一个patch只完成一项任务 2.用vim编辑多个文件,想同时关闭所有文件时候,可以用 :qall 命令 .vim用户手册08 3.mmc dev 0.mmc为U-boot命令,这句话的含义是设置 ...

  9. 直接插入排序算法(java)

    直接插入排序是将未排序的数据插入至已排好序序列的合适位置. 具体流程如下: 1.首先比较数组的前两个数据,并排序: 2.比较第三个元素与前两个排好序的数据,并将第三个元素放入适当的位置: 3.比较第四 ...

  10. HTML&CSS基础-清除浮动

    HTML&CSS基础-清除浮动 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.查看浮动效果 1>.HTML源代码 <!DOCTYPE html> &l ...