LA 4329 - Ping pong
2015-06-13 21:51
281 查看
题目:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2330
http://poj.org/problem?id=3928
分析:树状数组
代码:
http://poj.org/problem?id=3928
分析:树状数组
代码:
#include <cstdio> #include <algorithm> #include <cstring> using namespace std; const int Tmax=20005,Tmax2=100005; int n,data[Tmax],left[Tmax],right[Tmax],num[Tmax2],len; int lowbit(int x) { return x&(-x); } int sum(int x) { int ret=0; while(x>0) { ret+=num[x]; x-=lowbit(x); } return ret; } void add(int x,int d) { while(x<=len) { num[x]+=d; x+=lowbit(x); } return; } void tree_array(int start,int end,int move,int *array) { int i; end+=move; for(i=start;i!=end;i+=move) { add(data[i],1); array[i]=sum(data[i]-1); } return; } int main() { int T,i; long long int ans; scanf("%d",&T); while(T--) { ans=0;len=0; scanf("%d",&n); for(i=1;i<=n;i++){ scanf("%d",&data[i]); left[i]=right[i]=0; len=max(len,data[i]); } memset(num,0,sizeof(num)); tree_array(1,n,1,left); memset(num,0,sizeof(num)); tree_array(n,1,-1,right); for(i=1;i<=n;i++) ans+=left[i]*(n-i-right[i])+(i-1-left[i])*right[i]; printf("%lld\n",ans); } return 0; }
相关文章推荐
- NOIP2012 国王游戏
- 转 点击关闭时最小化到任务栏
- python进程池剖析(二)
- java EE 开发入门小程序 mvc设计模式 学生信息的管理
- html5跨域方法
- JDBC:getNString()和getString()的区别
- Linux虚拟机Redis安装
- LA 3027 - Corporative Network
- wpf实现图片拖动和缩放
- Android代码中实现WAP方式联网(转载!)
- 第59章、SharedPreferences存储(从零开始学Android)
- CocoaPod 使用
- heartbeat v1 + ldirctord
- LA 3027 - X-Plosives
- UVA-11549 Calculator Conundrum
- TimesTen1122安装与配置
- 关于MinGW编译程序出现缺少libgcc_s_dw2-1.dll问题
- uva 147 Dollars
- python进程池剖析(一)
- Java-马士兵设计模式学习笔记-装饰者模式