【poj 1990】MooFest(树状数组)
来源:互联网 发布:淘宝奥巴狗游戏 编辑:程序博客网 时间:2024/05/29 12:18
传送门biu~
题目大意:一群牛站成一条直线,第i头牛听见别人的讲话,别人的音量必须大于v[i]。两头牛i、j必须用同一个声音max(v[i],v[j])交流。消耗的能量为 声音大小*他们之间的距离。现在有n头牛,给定n头牛的v[i]和坐标,求他们之间两两交流所需要的能量和。
思路:把每头牛按v值大小排序。逐一加入时,第i头牛与第1~(i-1)头牛交流的声音大小一定是v[i]。这样就用树状数组numtree维护有多少头牛,用loctree维护牛的坐标和,用tot维护当前已加入的所有的牛的坐标和。
所以对于牛i,他前面有num头牛,这些牛的坐标和为loc,第i头牛的坐标为xi,声音v值为vi。那么它和比它坐标小的牛之间的坐标差front=num*xi-loc;它和比他坐标大的牛之间的坐标差back=(tot-loc-xi)-xi(i-num-1)。
最后让ans的值加上v[i]*(front+back)就可以了。
#include<bits/stdc++.h>#define lowbit(x) (x&(-x))#define MAXN 20005#define ll long longusing namespace std;struct COW{ int v,x;}a[MAXN];inline bool cmp(COW a,COW b){return a.v<b.v;}ll numtree[MAXN],loctree[MAXN],n;int Nmax;inline void add(ll *a,int x,int num){ while(x<=Nmax) { a[x]+=num; x+=lowbit(x); }}inline ll search(ll *a,int x){ ll re=0; while(x) { re+=a[x]; x-=lowbit(x); } return re;}int main(){ while(~scanf("%d",&n)) { ll ans=0,tot=0; memset(numtree,0,sizeof(numtree)); memset(loctree,0,sizeof(loctree)); Nmax=0; for(int i=1;i<=n;++i) { scanf("%d%d",&a[i].v,&a[i].x); Nmax=max(a[i].x,Nmax); } sort(a+1,a+n+1,cmp); for(int i=1;i<=n;++i) { add(numtree,a[i].x,1); add(loctree,a[i].x,a[i].x); tot+=a[i].x; ll num=search(numtree,a[i].x-1); ll loc=search(loctree,a[i].x-1); ll front=num*a[i].x-loc; ll back=(tot-loc-a[i].x)-a[i].x*(i-num-1); ans+=a[i].v*(front+back); } printf("%lld\n",ans); } return 0;}
阅读全文
0 0
- poj 1990 MooFest (两个树状数组)
- POJ 1990 MooFest(树状数组)
- POJ 1990-MooFest(树状数组)
- MooFest(POJ-1990)(树状数组)
- POJ 1990 MooFest(二维树状数组)
- POJ 1990 MooFest(树状数组)
- poj 1990 MooFest(树状数组)
- POJ 1990 MooFest(树状数组)
- [POJ 1990] MooFest (树状数组)
- POJ 1990 MooFest(树状数组)
- poj 1990 MooFest (树状数组)
- poj 1990 MooFest(树状数组)
- poj 1990 MooFest(树状数组变形)
- POJ 1990 MooFest (树状数组)
- poj 1990 MooFest(树状数组)
- poj 1990 MooFest (树状数组)
- poj 1990 MooFest(树状数组)
- 【poj 1990】MooFest(树状数组)
- 日期类的实现(其中包括构造函数,拷贝构造,赋值运算符重载,输出运算符重载,友元函数等等)
- 坚持#第201天~云计算的基础
- Python 类属性,实例属性,类方法,实例方法,静态方法
- 10月3日 c语言简单循环 在全系1000学生中,征集慈善捐款,当达到10万元就结束。
- 数据库入门级指令操作
- 【poj 1990】MooFest(树状数组)
- spring和mybatis的整合使用,未使用整合包的情况下maven用5可实现
- java selenium tess4j识别验证码模拟登陆。
- jQueryy原生js实现---hover事件
- 搬瓦工搭建VPS 再利用腾讯云做中转 最后使用pac模式
- go语言之map练习(二):编写一个程序wordfreq程序,统计输入文本中每个单词出现的频率(次数)
- C++随笔——悬空指针(dangling pointers)
- 高级C语言教程-作用域
- Spark Streaming累加器与广播的简单应用