HOJ 2275 Number sequence(树状数组) 大于小于问题
来源:互联网 发布:linux修改网卡配置 编辑:程序博客网 时间:2024/06/14 20:45
题意:给定一个n个元素的数列,令Ai, Aj, Ak,使得 Ai < Aj > Ak 且 i < j < k这样的三个数为一组。求出一共有多少组。
要建立两次树状数组。
首先,我们插入数据进入树状数组时,用一个tmp1数组来记录每个数前面有几个小于它的。这样就保存了 Ai < Aj 的数量了。
之后我们清空数组,再倒着插入一次,用tmp2数据记录每个数前面有几个小于它的。这样保证了Aj > Ak的数量了。
我们一乘即可
- #include<cstdio>
- #include<cstring>
- #include<algorithm>
- #include<iostream>
- using namespace std;
- #define M 35000
- #define N 50050
- #define ll long long
- #define lowbit(x) (x&-x)
- int tree[M];
- int num[N];
- ll tmp[N];
- int sum(int rt)
- {
- int s=0;
- while(rt>0){
- s+=tree[rt];
- rt-=lowbit(rt);
- }
- return s;
- }
- void update(int rt)
- {
- while(rt<=M-1){
- tree[rt]++;
- rt+=lowbit(rt);
- }
- }
- int main()
- {
- int n;
- while(~scanf("%d",&n)){
- memset(tree,0,sizeof(tree));
- for(int i=1;i<=n;i++){
- scanf("%d",&num[i]);
- num[i]++;
- }
- ll ans=0;
- for(int i=1;i<=n;i++){
- tmp[i]= sum(num[i]-1);
- update(num[i]);
- }
- memset(tree,0,sizeof(tree));
- for(int i=n;i>=1;i--)
- {
- ans+=tmp[i]*(ll)sum(num[i]-1);
- update(num[i]);
- }
- printf("%lld\n",ans);
- }
- return 0;
- }
阅读全文
0 0
- HOJ 2275 Number sequence(树状数组) 大于小于问题
- hoj 2275 Number sequence 树状数组解法
- HOJ 2275 Number sequence(树状数组)
- hoj 2275 Number sequence(树状数组)
- HOJ 2275 Number sequence(树状数组)
- -----hoj 2275 Number sequence(树状数组)
- HOJ 2275——Number sequence(树状数组)
- 树状数组题目总结三( 上)( HOJ 2275 Number sequence )
- HOJ 2275 Number Sequence
- hoj 2275 Number Sequence
- hoj 2275 Number sequence
- Hoj 2275 Number Sequence
- HOJ 2275 Number sequence
- hoj (2275)树状数组
- Number sequence 树状数组基础
- hoj 1867 水~~~树状数组
- hoj 2275 树状数组 水··不能int 64
- 求序列中满足Ai < Aj > Ak and i < j < k的组数 树状数组 HIT 2275 Number sequence
- hello
- 三分法
- TOP100summit:【分享实录-封宇】58到家多端消息整合之路
- 登陆注册
- 洛谷10月月赛R2-T3-Nephren Ruq Insania
- HOJ 2275 Number sequence(树状数组) 大于小于问题
- 8.通过和ServletAPI耦合的方式获取WEB资源
- 进程学习:进程间通信(system v IPC)2.共享内存
- 算法-二叉树查找排序
- 选择排序,冒泡排序及二分查找的代码实现
- Machine Learning学习之 系统(层次)聚类法
- Eclipse中安装STS(Spring Tool Suite)使用Spring Boot
- 今天开始写我的毕设
- 简单的SSH整合(基于注解和xml文件的配置)