题意:给你一串数且每个数都不同,问你(x,y,z)出现 x<z<y 的总次数

首先我们直接想的话不能使用O(n*log2 n)解决,所以可以正难则反

可以求得x<(y,z)的值,减去的x<y<z就好了

x<(y,z):每一位后面比此大的个数V,使用V*(V-1)/2求

x<y<z:前面POJ 3928就是求这个(使用两次树状数组)

#include<set>
#include<map>
#include<queue>
#include<stack>
#include<cmath>
#include<vector>
#include<string>
#include<cstdio>
#include<cstring>
#include<stdlib.h>
#include<iostream>
#include<algorithm>
using namespace std;
#define eps 1E-8
/*注意可能会有输出-0.000*/
#define Sgn(x) (x<-eps? -1 :x<eps? 0:1)//x为两个浮点数差的比较,注意返回整型
#define Cvs(x) (x > 0.0 ? x+eps : x-eps)//浮点数转化
#define zero(x) (((x)>0?(x):-(x))<eps)//判断是否等于0
#define mul(a,b) (a<<b)
#define dir(a,b) (a>>b)
typedef long long ll;
typedef unsigned long long ull;
const int Inf=<<;
const double Pi=acos(-1.0);
const int Mod=1e8+;
const int Max=;
int num[Max],n;
int lowbit(int x)
{
return x&(-x);
}
void Add(int x,ll y,ll *bit)
{
while(x<=n)
{
bit[x]+=y;
x+=lowbit(x);
}
return;
}
ll Sum(int x,ll *bit)
{
ll sum=0ll;
while(x)
{
sum+=bit[x];
x-=lowbit(x);
}
return sum;
}
ll bit[Max];
ll val[Max];//某个位置后面比起大的个数
ll Solve()
{
ll ans=0ll,sum=0ll;
if(n<)
return ans;
for(int i=; i<=n; ++i)
{
Add(num[i],-1ll,bit);//首先此位置减掉
val[i]=(ll)n-i-Sum(num[i]-,bit);
ans+=(val[i]-1ll)*val[i]/2ll;
}
memset(bit,0ll,sizeof(bit));
for(int i=; i<=n; ++i)
{
sum+=val[i];//总个数
Add(num[i],val[i],bit);//每个存的是后面比其大的个数
}
for(int i=; i<=n; ++i)
{
Add(num[i],-val[i],bit);
sum-=val[i];
ans-=(sum-Sum(num[i]-,bit));//减去不符合的值
}
return ans%(ll)Mod;
}
int main()
{
int t,coun=;
scanf("%d",&t);
while(t--)
{
memset(bit,0ll,sizeof(bit));
scanf("%d",&n);
for(int i=; i<=n; ++i)
{
scanf("%d",&num[i]);
Add(num[i],1ll,bit);
}
printf("Case #%d: %I64d\n",++coun,Solve());
}
return ;
}

HDU 4000 Fruit Ninja (树状数组+反向思维)的更多相关文章

  1. hdu 4000 Fruit Ninja 树状数组

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4000 Recently, dobby is addicted in the Fruit Ninja. ...

  2. HDU 4000 Fruit Ninja 树状数组 + 计数

    给你N的一个排列,求满足:a[i] < a[k] < a[j] 并且i < j < k的三元组有多少个. 一步转化: 求出所有满足 a[i] < a[k] < a[ ...

  3. Fruit Ninja(树状数组+思维)

    Fruit Ninja Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  4. hdu 4000Fruit Ninja 树状数组

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission( ...

  5. HDU 3333 | Codeforces 703D 树状数组、离散化

    HDU 3333:http://acm.hdu.edu.cn/showproblem.php?pid=3333 这两个题是类似的,都是离线处理查询,对每次查询的区间的右端点进行排序.这里我们需要离散化 ...

  6. HDU 3333 - Turing Tree (树状数组+离线处理+哈希+贪心)

    题意:给一个数组,每次查询输出区间内不重复数字的和. 这是3xian教主的题. 用前缀和的思想可以轻易求得区间的和,但是对于重复数字这点很难处理.在线很难下手,考虑离线处理. 将所有查询区间从右端点由 ...

  7. HDU 3333 Turing Tree (树状数组)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3333 题意就是询问区间不同数字的和. 比较经典的树状数组应用. //#pragma comment(l ...

  8. HDU 4325 Flowers(树状数组)

    Flowers Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Sub ...

  9. HDU 6348 序列计数 (树状数组 + DP)

    序列计数 Time Limit: 4500/4000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total Subm ...

随机推荐

  1. X明X源面试题《三》

    本文转自自zhangxh_Doris 昨天(05.23)下午去参加了明源软件的暑期实习宣讲+笔试,第一次听说这个行业,行业和笔试风格完全不一样啊,5道行测智力题+1个问答+ 斐波那契数列 + 洗牌算法 ...

  2. poj2528

    Mayor's posters Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 56864   Accepted: 16445 ...

  3. libnids介

    转自:http://blog.chinaunix.net/uid-22832715-id-2111578.html Libnids开发包介绍     Libnids是一个用于网络入侵检测开发的专业编程 ...

  4. css 生效顺序 less 写法

    <!DOCTYPE html><html><style type="text/css">.c{color:red;}.c{color:green ...

  5. Starting Session of user root.

    Sep 23 01:50:01 d systemd: Started Session 1475 of user root.Sep 23 01:50:01 d systemd: Starting Ses ...

  6. Linux中权限管理之ACL权限

    1.简介: a.作用: 是为了防止权限不够用的情况,一般的权限有所有者.所属组.其他人这三种,当这三种满足不了我们的需求的时候就可以使用ACL权限 b.故事背景: 一个老师,给一个班的学员上课,他在l ...

  7. ApexSQL Recover 恢复一个被drop的表的数据

    没有备份的情况下恢复一个被drop的表的数据 ApexSQL Recover 恢复一个被drop的表的数据 转自:https://solutioncenter.apexsql.com/zh/%E6%B ...

  8. 免费 SSL 安全证书

    为了保证网上传输信息的安全而在自己的 Linode VPS 上部署 SSL 加密服务.商业 CA 较贵,所以使用了自己签发的 CA.网友神爱的留言提到了 StartSSL 的免费 CA,稍做了一些调查 ...

  9. mapdb与Redis区别:

    Redis也能完全相同的工作,但必竟其独立于JVM之外通过Socket交互,能达到10万次/秒就很不了不起了 mapdb可直接嵌入到JVM运行空间,运行效率是Redis没法比的,单线程能达到 30万次 ...

  10. 查看连接MYSQL数据库的IP信息

    要统计数据库的连接数,我们通常情况下是统计总数,细分到每个ip地址: 方法一: ) as ip , count(*) from information_schema.processlist group ...