二次联通门 : 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. 查看php和apache配置成功的方法

    PHP配置文件是php.ini  检查php是否配置成功,在wamp/www根目录写一个phpinfo.php文件,内容为 <?php phpinfo(); ?>  然后可以打开网页输入l ...

  2. vs setup 自动下载依赖的framework配置

    1.项目->属性->签名->选中为ClickOnce清单签名->创建测试证书 2.项目->属性->安全性->启用ClickOnce安全设置 3.setup项目 ...

  3. hdu 1548 简单bfs。。。

    由于题目过水.. 我就在这里把bfs的模板写一些吧.. bfs的思想是利用队列的特性 对树的每一层先遍历 每一次访问时取出队首 然后排出~ #include<queue>void bfs( ...

  4. jmeter保存返回数据到csv

    添加一个线程组,然后右键选择“正则表达式提取器” 配置正则表达式: 添加添加后置处理器beanshell postprocessor: 保存提取的数据: 代码: FileWriter fstream ...

  5. 【小知识点】js无需刷新在url地址添加参数

    今天后端同事找我,问我一个关于js无需刷新在url地址添加参数的方法. 然后我百度啊,终于在一篇文章找到了办法,非常简单的一句代码. window.history.pushState({}, 0, w ...

  6. Eclipse workspace被锁定

    重新打开Eclipse时,提示如下: Workspace Unavailable: Workspace in use or cannot be created, choose a different ...

  7. Android NDK 学习之调用Java函数

    本博客主要是在Ubuntu 下开发,且默认你已经安装了Eclipse,Android SDK, Android NDK, CDT插件. 在Eclipse中添加配置NDK,路径如下Eclipse-> ...

  8. List转换字典去重问题

    数据源 var list = new List<TestClass> { ,Name="}, ,Name="}, ,Name="}, ,Name=" ...

  9. JAVA 判断给定目录的大小

    题目:给定一个目录,判断该目录的大小,单位为G 思路: 递归拿到目录的子文件,然后取长度,累加 public class FileDemo02 { public static void main(St ...

  10. Python面向对象之多态、封装

    一.多态 超过一个子类继承父类,出现了多种的形态. 例如,动物种类出现了多种形态,比如猫.狗.猪 class Animal:pass class Cat(Animal):pass class Dog( ...