树状数组的应用(SOJ2728)
来源:互联网 发布:手机 js保存图片 编辑:程序博客网 时间:2024/05/26 14:09
(2012-7-23 21:19:34)
SOJ2728:http://cstest.scu.edu.cn/soj/problem.action?id=2728
题目大意:当两头牛i,j交流的时候,最小声音为max{v[i],v[j]}*它们之间的距离。现在有n头牛,求它们之间两两交流最少的音量和。
SOJ2728:http://cstest.scu.edu.cn/soj/problem.action?id=2728
题目大意:当两头牛i,j交流的时候,最小声音为max{v[i],v[j]}*它们之间的距离。现在有n头牛,求它们之间两两交流最少的音量和。
解题思路:首先将这n头牛按照v值从小到大排序。这样,排在后面的牛和排在前面的牛讲话,两两之间所用的音量必定为后面的牛的v值,这样一来才有优化的余地。然后,对于某头牛i来说,只要关心与排在它前面的牛交流就好了。我们只需必须快速地求出排在它前面的牛和它之间距离的绝对值之和xiaoye。这里需要两个树状数组,一个记录牛i左边<牛i位置的牛的个数;另一个记录牛i左边<牛i位置的牛的位置之和。有了这两个量,那么牛i左边>牛i位置的牛的个数以及牛i左边>牛i位置的牛的位置之和这两个量也就知道了。
代码:
#include<iostream>#include<algorithm>#include<cstring>using namespace std;int n;struct node { int pos; int v;}s[20005];int c[20005];int d[20005];int lowbit(int x){ return x&(x^(x-1));}void mod1(int i,int x){ while(i<20005) { c[i]+=x; i+=lowbit(i); }}void mod2(int i){ while(i<20005) { d[i]++; i+=lowbit(i); }}int sum(int hi[],int i){ int SUM=0; while(i) { SUM+=hi[i]; i-=lowbit(i); } return SUM;}bool cmp(node a,node b){ return a.v<b.v;}long long xiaoye;int main(){ int i; while(scanf("%d",&n)==1) { xiaoye=0; for(i=1;i<=n;i++) scanf("%d%d",&s[i].v,&s[i].pos); sort(s+1,s+n+1,cmp); memset(c,0,sizeof(c)); memset(d,0,sizeof(d)); int max=-1; for(i=1;i<=n;i++) { if(s[i].pos>max) max=s[i].pos; long long temp1=sum(c,s[i].pos); long long temp=sum(c,max); long long temp2=sum(d,s[i].pos); xiaoye+=(temp2*s[i].pos-temp1)*s[i].v; xiaoye+=(temp-temp1-(i-temp2-1)*s[i].pos)*s[i].v; mod1(s[i].pos,s[i].pos); mod2(s[i].pos); //cout<<temp1<<' '<<temp2<<' '<<temp<<endl; } printf("%lld\n",xiaoye); } return 0;}
0 0
- 树状数组的应用(SOJ2728)
- 树状数组的应用
- 树状数组的应用
- 树状数组的应用(SOJ2497)
- 树状数组的应用(SOJ2559)
- hdu 5147 (树状数组的应用)
- poj2481-树状数组的应用
- HDU3874树状数组的应用
- 树状数组的应用系列
- 树状数组的应用(区间修改,区间查询,多维树状数组)
- pku2352——Stars(经典树状数组的应用)
- uva 1428 - Ping pong (树状数组的应用)
- hdu 3874 Necklace(树状数组的灵活应用)
- 树状数组的简单应用(求逆序对个数)
- 树状数组的应用(区间修改+区间查询)
- 树状数组的简单应用(夏夜砍树)
- HDU3874 树状数组的灵活应用
- POJ2352——树状数组的应用
- linux expect
- Xess SDRAM conctrller
- php怎么连接access数据库
- 养山羊必须要注意的地方
- android调用第三方库——第四篇——调用多个第三方库
- 树状数组的应用(SOJ2728)
- DP训练 K好数
- Boost库学习之旅入门篇
- 请简要描述客户端发送的http request header都包含哪些内容
- 游戏中寻路的问题研究
- String、StringBuffer、StringBuilder的问题
- jsp获取到的文本框值为空
- 分享 MEF,模块解耦,WCF Rest 扩展 基础示例
- iOS界面简介