题目链接:hdu_5792_World is Exploding

题意:

给你一个数列,让你找有多少个(a,b,c,d)满足a≠b≠c≠d,1≤a<b≤n,1≤c<d≤n,Aa<Ab,Ac>Ad.

题解:

如果abcd可以相等,那么就是所有的顺序对和逆序对相乘,但这里要不相等,所以我们减去相等的情况就行。

要满足Aa<Ab,Ac>Ad,考虑其中一个数Ai 然后我们可以发现,建立在Ai的顺序对和逆序上,bd不会相等,

所以我们只需要找出每一个A前后顺序对和逆序对,然后对应交叉相乘,就是a=c的情况,然后总答案减去就行

 #include<cstdio>
#include<algorithm>
#define F(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
typedef long long ll; const int N=5E4+;
int a[N],n,idx[N],len,tr[N],t1[N],t2[N],t3[N],t4[N]; inline void add(int x,int c){while(x<=n)tr[x]+=c,x+=x&-x;}
inline int ask(int x){int an=;while(x)an+=tr[x],x-=x&-x;return an;} int getid(int x){return lower_bound(idx+,idx++len,x)-idx;} int main()
{
while(~scanf("%d",&n))
{
F(i,,n)scanf("%d",a+i),idx[i]=a[i],tr[i]=;
sort(idx+,idx++n),len=;
F(i,,n)if(idx[i]!=idx[len])idx[++len]=idx[i];
ll zheng=,ni=,ans;
F(i,,n)
{
int x=getid(a[i]);
int now=ask(x-);
zheng+=now,t1[i]=now,t2[i]=ask(n)-ask(x),ni+=t2[i];
add(x,);
}
F(i,,n)tr[i]=;
for(int i=n;i>=;i--)
{
int x=getid(a[i]);
int now=ask(x-);
t4[i]=now,t3[i]=ask(n)-ask(x);
add(x,);
}
ans=zheng*ni;
F(i,,n)ans-=t1[i]*t2[i]+t1[i]*t4[i]+t3[i]*t2[i]+t3[i]*t4[i];
printf("%lld\n",ans);
}
return ;
}

最新文章

  1. 一个简单的路由,用javascript实现
  2. javascript 函数与对象
  3. java线程与缓存
  4. 如何在java中拟合正态分布
  5. phpize报cannot find autoconf
  6. jQueryMobile控件之页面切换
  7. 高手详解SQL性能优化十条建议
  8. [MAC ] Mac-OSX下安装Git
  9. POJ 3641
  10. Java开发--操作MongoDB
  11. 日志式文件系统:SGI的xfs, Reiserfs, IBM的jfs, ext3fs
  12. HDOJ(HDU) 2132 An easy problem
  13. 《第一行代码》学习笔记34-服务Service(1)
  14. 汉字转拼音的vc++程序源代码
  15. 十一:Java之GUI图形Awt和Swing
  16. IceMx.Mvc 我的js MVC 框架 一、html代码的分离(视图)
  17. php调去存储过程
  18. java做帐户登录失败锁定
  19. 通过EntityFramework来操作MySQL数据库
  20. Maven的下载、安装与环境配置

热门文章

  1. JavaScript DOM编程艺术-学习笔记(总结一)
  2. shell中$0,$?,$!
  3. Jedis操作redis(转)
  4. 第一百零八节,JavaScript,内置对象,Global对象字符串编码解码,Math对象数学公式
  5. json恶补
  6. Docker技术学习
  7. 转 delphi SelText,GetText,SetText用法
  8. 基于C++的顺序表的实现
  9. nmon性能统计工具使用-初认识
  10. MMS model