树状数组应用
来源:互联网 发布:淘宝企业开店保证金 编辑:程序博客网 时间:2024/06/17 08:43
B
/*计算序列 a[] 中, 当 i < j < k, a[i] < a[j]&&a[j] > a[k], (a[i]和a[k]无需比较大小)这样的子序列个数。
Input
多组输入数据:
每组数据第一行一个数n:代表序列长度为n(0<n<50000);
接下来第二行有n个数:代表序列元素的值a[i](0<=a[i]<50000,且任意2个元素的值不相同)。
Output
对于每组数据输出符合条件的子序列的个数,每个输出占一行。
Sample Input
5
1 3 5 2 4
——————————————————————
解题思路:
结构体 node。vel表示这个数本身大小node。id表示第几次输入(原来的顺序)
把结构体数组从小到大排列;c[i]存放比第I个数小的数字的个数;
因为已经排完序,所以get_sum(n)直接表示所有比此时需要比较的数小的数;
get_sum(node[i].id)表示当其按照原顺序排列时其前面比它小的数的个数;
所以结果sum += (get_sum(n) - get_sum(num[j].id)) * get_sum(num[j].id - 1 );
*/
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
#define maxn 50000 + 5
using namespace std;
int n;
int c[maxn];
struct node
{
int vel;
int id;
} ;
int lowbit( int i)
{
return i &(-i);
}
void add(int i, int j)
{
while( i <= n)
{
c[i] += j;
i += lowbit(i);
}
}
int get_sum(int i)
{
int ans = 0;
while( i > 0)
{
ans += c[i];
i -= lowbit(i);
}
return ans;
}
int cmp(node x, node y)
{
return x.vel <y.vel;
}
int main(void)
{ int sum = 0;
while(scanf("%d",&n) != EOF)
{ node num[maxn];
sum = 0;
for( int i = 1; i <= n; i++)
{
scanf("%d",&num[i].vel);
num[i].id = i;
}
sort(num+1, num+n+1,cmp);
memset(c,0,sizeof(c));
add(num[1].id,1);
for ( int j = 2; j <= n ; j++)
{ //cout<<get_sum(num[j].id)<<" "<<get_sum(n)<<" ";
//cout<<num[j].id<<" ";
//cout<<(get_sum(n) - get_sum(num[j].id)) * get_sum(num[j].id - 1 )<<endl;
sum += (get_sum(n) - get_sum(num[j].id)) * get_sum(num[j].id - 1 );
add(num[j].id,1);
}
printf("%d\n", sum);
}
}
- 树状数组应用
- 树状数组应用
- 树状数组应用
- 树状数组简单应用
- 树状数组应用
- 树状数组及其应用
- 树状数组及其应用
- poj3928 树状数组应用
- 树状数组及其应用
- 树状数组应用
- 树状数组的应用
- 树状数组的应用
- poj2481-树状数组的应用
- HDU 5122 树状数组应用
- HDU3874树状数组的应用
- HDU1556 树状数组 高级应用
- 树状数组的应用系列
- Cows poj2481 树状数组应用
- Unity学习小结1 - 资源优化(1)
- web app debugging的一些方法和网站
- 《谁是谷歌想要的人才?》读书摘抄(3)——计算能力筛选
- 自动化1121何永佳第二周作业
- 报表三部曲之连接
- 树状数组应用
- 自我扩展—如何判断一个指定的节点是否是在带环链表的环内还是环外!
- ustc 1233 Gift
- 牛人也得看的15个CSS常识
- error C2440: “static_cast”: 无法从“void (__thiscall CChatDlg::* )(WPARAM,LPARAM)”转换为“LRE
- C++中的虚函数是如何工作的?
- 高效的MySQL分页
- Spring工具类详解
- 002_019 Python 根据指定的搜索路径和模式寻找文件