题意:求所有子区间的逆序数对数之和

题解:树状数组维护,对于每一对逆序数(l,r)属于l*(n-r+1)个区间,计算每一对对结果的贡献即可,可用树状数组维护,sum维护(n-r+1),按逆序数那样操作

这题最狗的地方是爆longlong,java又超时。。。,用了一个小技巧,避免爆longlong

#include<bits/stdc++.h>
#define fi first
#define se second
#define ll long long
#define ull unsigned long long
#define mp make_pair
#define pb push_back
#define mod 1000000007
#define pii pair<int,int>
#define ls l,m,rt<<1
#define rs m+1,r,rt<<1|1 using namespace std; const int g=10.0,eps=1e-;
const int N=+,maxn=+,inf=0x3f3f3f3f; ll a[N],b[N],sum[N];
void add(int i,ll x)
{
while(i<N)
{
sum[i]+=x;
i+=i&(-i);
}
}
ll query(int i)
{
ll ans=;
while(i>)
{
ans+=sum[i];
i-=i&(-i);
}
return ans;
}
int main()
{
/*ios::sync_with_stdio(false);
cin.tie(0);*/
ll n,cnt=;
scanf("%lld",&n);
for(ll i=;i<=n;i++)scanf("%lld",&a[i]),b[cnt++]=a[i];
sort(b,b+cnt);
cnt=unique(b,b+cnt)-b;
for(ll i=;i<=n;i++)a[i]=lower_bound(b,b+n,a[i])-b,a[i]++;
ll ans[]={},te=1e18;
for(ll i=;i<=n;i++)
{
ans[]+=(ll)(n-i+)*(query(n)-query(a[i]));
if(ans[]>=te)ans[]+=ans[]/te,ans[]%=te;
add(a[i],i);
}
if(ans[])printf("%lld%018lld\n",ans[],ans[]);
else printf("%lld\n",ans[]);
return ;
}
/*******************
3
0 0 0
*******************/

最新文章

  1. 使用display:table来解决一些问题
  2. iOS第三方库管理工具
  3. 关于Kendo UI的使用心得
  4. 【codevs1993】 草地排水
  5. codevs1064 虫食算
  6. BZOJ3249 : [ioi2013]game
  7. sql loader
  8. jsp The requested resource (/demo10/loginBean) is not available.
  9. 背景CSS
  10. eclipse 新建项目下后.metadata\.plugins的文件夹解释和如何保存自己的特定工程设置
  11. LINUX 内核月报 taobao
  12. HDOJ/HDU 1804 Deli Deli(英语单词复数形式~)
  13. SDUT 2894-C(最短spfa)
  14. Binary Tree Zigzag Level Order Traversal(z字形打印二叉树)
  15. Tomcat启动特慢之SecureRandom问题解决
  16. LocalDate常用技巧
  17. vue使用node的入门
  18. 【论文 PPT】 【转】Human-level control through deep reinforcement learning(DQN)
  19. java数据结构之树
  20. Java通信过程的中文乱码的解决

热门文章

  1. angular2表单初体验
  2. 前端基础-html(1)
  3. Linux中的grep和cut
  4. br_netfilter 模块开机自动方法
  5. 016-Hadoop Hive sql语法详解6-job输入输出优化、数据剪裁、减少job数、动态分区
  6. CentOS Linux中zip压缩和unzip解压缩命令详解
  7. sqlserver整理的实用资料
  8. numpy的通用函数:快速的元素级数组函数
  9. Linux虚拟内存管理(glibc)
  10. Python多线程循环