传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=5055

  这道题……不得不说,从标题到题面都能看出一股浓浓的膜法气息……苟……

  题意就是统计顺序三元组(似乎可以这么叫吧)的乘积和。顺序三元组有个低阶版本叫做顺序对,顺序对有一个亲兄弟叫做逆序对。既然我们可以用值域树状数组来处理关于顺/逆序对,因此也可以尝试用同样的方法处理这道题。

  我们可以固定a[j],求剩下的a[i]和a[k]。ans=a[j]*sigma(a[i]*a[k])

  于是我们就把一个顺序三元组拆成了两个顺序对,一个是a[i]<a[j]且i<j,另一个是a[j]<a[k]且j<k,且这两个逆序对是不干扰的,可以直接把结果乘起来。

  所以我们对于每个数,求出左边比它小的数的总和,和右边比他大的数的总和,记为l[i]和r[i]。于是ans=sigma(a[i]*l[i]*r[i])

#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<ctime>
#include<algorithm>
#include<queue>
#include<vector>
#define ll long long
#define mod 19260817
using namespace std;
inline ll read()
{
ll tmp=; char f=,c=getchar();
while(c<''||''<c){if(c=='-')f=-; c=getchar();}
while(''<=c&&c<=''){tmp=tmp*+c-''; c=getchar();}
return tmp*f;
}
ll c[];
ll a[],id[],rk[];
ll l[],r[];
int n;
bool cmp(ll x,ll y){return a[x]<a[y];}
void add(int x,ll k){while(x<=n){c[x]+=k; x+=x&(-x);}}
ll getsum(int x){ll sum=; while(x){sum+=c[x]; x-=x&(-x);} return sum;}
int main()
{
int i;
n=read();
for(i=;i<=n;i++)a[i]=read(),id[i]=i;
sort(id+,id+n+,cmp);
rk[id[]]=;
for(i=;i<=n;i++){
rk[id[i]]=rk[id[i-]];
if(a[id[i]]>a[id[i-]])++rk[id[i]];
}
for(i=;i<=n;i++)c[i]=;
for(i=;i<=n;i++){
l[i]=getsum(rk[i]-)%mod; add(rk[i],a[i]);
}
for(i=;i<=n;i++)c[i]=; ll sum=;
for(i=n;i;i--){
r[i]=(sum-getsum(rk[i]))%mod; add(rk[i],a[i]); sum+=a[i];
}
ll ans=;
for(i=;i<=n;i++)ans=(ans+l[i]*r[i]%mod*a[i])%mod;
printf("%lld\n",ans);
return ;
}

bzoj5055

最新文章

  1. 把某一字段更新为连续值的SQL
  2. QT 初阶 第二章 创建对话框(查找对话框实例)
  3. 利用Jquery的load函数实现页面的动态加载
  4. 搭建vpn
  5. VS 2013 打包程序教程
  6. Careercup - Google面试题 - 6331648220069888
  7. 二维坐标的平移,旋转,缩放及matlab实现
  8. android正在运行进程和后台缓存进程的区别
  9. oracle-TNS是什么?
  10. YUI 之getLocation
  11. Object转换为字符并去空格
  12. domain logic approaches
  13. UI自动化框架——构建思维
  14. 【洛谷P4735】最大异或和
  15. JS 求一组数中所有数的和以及平均值
  16. mysql原理~undo
  17. java 连接redis 以及基本操作
  18. Quartz 原理
  19. 第一个手写Win32窗口程序
  20. Java checked 异常 和 RuntimeException(运行时异常)

热门文章

  1. Sql server还原失败(数据库正在使用,无法获得对数据库的独占访问权)
  2. 1.SpringMvc--初识springmvc
  3. CMU-15445 LAB3:事务隔离,two-phase locking,锁管理器
  4. M&#178;的经典语录
  5. EasyNVR内网摄像机接入网关+EasyNVS云端管理平台,组件起一套轻量级类似于企业级萤石云的解决方案
  6. easy 正则表达式验证 封装
  7. POJ 1408 Fishnet【枚举+线段相交+叉积求面积】
  8. 好的commit应该长啥样 https://github.com/torvalds/linux/pull/17#issuecomment-5654674
  9. Python里面如何拷贝一个对象?
  10. F-02 创建财务凭证BAPI