hdu 4000 - Fruit Ninja(树状数组)
来源:互联网 发布:jhene aiko 知乎 编辑:程序博客网 时间:2024/04/29 23:22
题意:
给定一个1到n的排列,输出三元组(x,y,z) (满足条件x<z<y)的个数。
思路:
建立树状数组,对于每个位置都求出前面比a[i]小的数字的个数L,好后面比a[i]大的数字的个数R, 则有该位置作为开始的的满足条件的三元组包含在R(R-1)个中,当然其中参杂着(x,y,z)(x<y<z),这样的三元组可以有L*R得到,二者之差便是答案,
代码如下:
#include <cstdio>#include <cstring>#include <cstdlib>#include <cmath>#include <queue>#include <stack>#include <list>#include <vector>#include <map>#include <algorithm>#define LL long long#define LLU unsigned long long#define INF 0x7fffffff#define MOD 100000007using namespace std;#define lowbit(x) x&-x#define M 100005int c[M];LL sum(int x){ LL ret = 0; while(x>0) { ret += c[x]; x -= lowbit(x); } return ret;}void add(int x, int n){ while(x<=n) { c[x] += 1; x += lowbit(x); }}int main (){ int t, n, x, k = 0; scanf("%d",&t); while(t--) { scanf("%d", &n); LL ans = 0; memset(c,0,sizeof(c)); for(int i = 1; i <= n; ++i) { scanf("%d",&x); add(x, n); LL l = sum(x-1); LL r = n - i - x + l + 1; ans -= l*r; if(r>=2) ans += r*(r-1)/2; } printf("Case #%d: %I64d\n",++k, ans%MOD); } return 0;}
- hdu 4000 Fruit Ninja 树状数组+统计
- HDU 4000 Fruit Ninja 树状数组
- hdu 4000 - Fruit Ninja(树状数组)
- HDU 4000 Fruit Ninja 【树状数组】
- hdu 4000 Fruit Ninja(树状数组)
- hdu 4000 Fruit Ninja(树状数组)
- HDU 4000 Fruit Ninja(树状数组)
- HDU 4000 Fruit Ninja(树状数组)
- HDU 4000 Fruit Ninja (树状数组+组合问题)
- Fruit Ninja - HUD 4000 树状数组
- hdoj 4000 Fruit Ninja 【树状数组 + 思维】
- hdu4000 Fruit Ninja(树状数组)
- hdu 4000 Fruit Ninja
- hdu 4000 Fruit Ninja
- HDU 4000 Fruit Ninja
- HDU 4000 Fruit Ninja
- HDU 4000 Fruit Ninja
- HDU 4000 Fruit Ninja && HLG 1625 ikki的数字 (树状数组)
- C语言指针导学(4)——分清函数指针和指针函数
- UVa - 10010 - Where's Waldorf?
- 【相似的生活,不可思议】
- UVa:10706 Number Sequence
- HDU 2066 一个人的旅行 Dijkstra(迪杰斯特拉)算法
- hdu 4000 - Fruit Ninja(树状数组)
- 《linux内核设计与实现》阅读笔记之第六章中断相关概念
- 不为人知的关闭程序提示【mfxp】
- 【简约&&美女win7主题】_8.4
- ThinkPHP学习笔记(四)模型与数据库
- Java和C++的对照
- 数据库主键的设计
- xp开机启动tomcat服务
- 网站安全狗Apache v2.0正式版【免费xp系统下载】