luogu P2345 奶牛集会
二次联通门 : 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 奶牛集会的更多相关文章
- luogu P2345 奶牛集会 |排序+树状数组
题目描述 约翰的N 头奶牛每年都会参加"哞哞大会".哞哞大会是奶牛界的盛事.集会上的活动很多,比如堆干草,跨栅栏,摸牛仔的屁股等等.它们参加活动时会聚在一起,第i 头奶牛的坐标为X ...
- 洛谷 P2345 奶牛集会 解题报告
P2345 奶牛集会 题目背景 MooFest, 2004 Open 题目描述 约翰的N 头奶牛每年都会参加"哞哞大会".哞哞大会是奶牛界的盛事.集会上的活动很 多,比如堆干草,跨 ...
- 洛谷 P2345 奶牛集会
https://www.luogu.org/problem/show?pid=2345 题目描述 约翰的N 头奶牛每年都会参加“哞哞大会”.哞哞大会是奶牛界的盛事.集会上的活动很 多,比如堆干草,跨栅 ...
- 洛谷P2345 奶牛集会
题目背景 MooFest, 2004 Open 题目描述 约翰的N 头奶牛每年都会参加“哞哞大会”.哞哞大会是奶牛界的盛事.集会上的活动很 多,比如堆干草,跨栅栏,摸牛仔的屁股等等.它们参加活动时会聚 ...
- p2345 奶牛集会
传送门 题目 约翰的N 头奶牛每年都会参加“哞哞大会”.哞哞大会是奶牛界的盛事.集会上的活动很 多,比如堆干草,跨栅栏,摸牛仔的屁股等等.它们参加活动时会聚在一起,第i 头奶牛的坐标为Xi,没有两头奶 ...
- P2345 奶牛集会andP2657 低头一族
做法是一样的 题目背景 MooFest, Open 题目描述 约翰的N 头奶牛每年都会参加“哞哞大会”.哞哞大会是奶牛界的盛事.集会上的活动很 多,比如堆干草,跨栅栏,摸牛仔的屁股等等.它们参加活动时 ...
- AC日记——奶牛集会 洛谷 P2345
奶牛集会 思路: 把奶牛按照v排序: 然后,每次都把奶牛放入一个集合s: 因为奶牛已经排序: 所以,每次第i次放入奶牛起作用的v就是vi: 每次ans+=(xi*sum-sumxl)*vi+(sumx ...
- usaco 奶牛集会 && 奶牛抗议
奶牛集会 Description 约翰家的N头奶牛每年都会参加“哞哞大会” .哞哞大会是世界奶牛界的盛事.集会上 的活动很多,比如堆干草,跨栅栏,摸牛仔的屁股等等.当然,哞哞大叫肯定也包括在内. 奶牛 ...
- 【树状数组】【P2345】 奶牛集会
传送门 Description 约翰的\(N\)头奶牛每年都会参加"哞哞大会".哞哞大会是奶牛界的盛事.集会上的活动很多,比如堆干草,跨栅栏,摸牛仔的屁股等等.它们参加活动时会聚在 ...
随机推荐
- 1. Spark基础解析
1.1 Spark概述 1.1.1 什么是Spark 官网:http://spark.apache.org Spark是一种快速.通用.可扩展的大数据分析引擎,2009年诞生于加州大学伯克利分校AMP ...
- SSL 杂谈
在电子邮件系统中的开发和维护中,由于安全性的需要,经常会遇到 SSL 相关的问题,这里整理下 SSL 的一些基础知识 什么是 SSL SSL (Secure Sockets Layer) 是一种在应用 ...
- win10 idea springboot上传镜像到远程docker服务器
1. 开启2375端口,供外部访问docker vim /usr/lib/systemd/system/docker.service 修改ExecStart为下面一行内容 #ExecStart=/us ...
- vue基于 element ui 的按钮点击节流
vue的按钮点击节流 场景: 1.在实际使用中,当我们填写表单,点击按钮提交的时候,当接口没返回之前,迅速的点击几次,就会造成多次提交. 2.获取验证码,不频繁的获取. 3.弹幕不能频繁的发 基于这几 ...
- VMWare打开centos,提示内部错误
如题,VMWare打开centos,提示内部错误.该原因是因为服务被停止了之后没有将其启动,将其启动就解决了. CMD客户端输入命令 services.msc 将关于VM的服务启动就可以了
- Centos7+puppet+foreman,模板介绍
一.简介 provision templates 是灵活部署合适的操作系统的核心,模板包括有好几类 1.模板种类 pxe相关的模板,比如pxelinux,pxegrub,pxegrub2 kickst ...
- [v]Linux下安装Git
Ubuntu12.04中默认没有安装Git.需要自行安装. 1. 安装Git 1.1 Ubuntu12.04下 可以使用apt-get方式安装,也可以下载源代码安装[1],我们这里使用apt-git安 ...
- Dev GridControl 子集合标题
显示效果: 设置: this.gridView3.OptionsView.ShowViewCaption = true; this.gridView3.ViewCaption = "资产明细 ...
- IClientMessageInspector IDispatchMessageInspector
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- Spark机器学习基础-特征工程
对连续值处理 0.binarizer/二值化 from __future__ import print_function from pyspark.sql import SparkSession fr ...