BZOJ2837 : 小强的形状
离散化后通过树状数组求出:
b[i]为i之前比它小的。
c[i]为i之前比它大的=i-1-i之前小于等于它的。
d[i]为i之后比它小的。
e[i]为i之后比它大的=n-i-f[i]。
f[i]为i之后小于等于它的。
则:
$cnt_{123}=\sum_{i=1}^n b[i]e[i]$
$cnt_{321}=\sum_{i=1}^n c[i]d[i]$
$cnt_{213}$=将序列a翻转后的$cnt_{312}$
$cnt_{231}$=将序列a翻转后的$cnt_{132}$
$cnt_{312}=\sum_{i=1}^n b[i]c[i]-cnt_{132}$
$cnt_{132}$可以这样计算:
枚举$3$的位置$i$,它右边比它小的$k$有$b[k]$的贡献,还要减去$i$右下角内$12$形状的二元组的个数,即右下角$b[k]+f[k]$的和$-C_{d[i]}^2$。
时间复杂度$O(n\log n)$。
#include<cstdio>
#include<algorithm>
#define N 100010
typedef long long ll;
int n,i,a[N],b[N],c[N],d[N],e[N],f[N];ll bit[N],c1,c2,c3,c4,c5,c6,all;
inline void read(int&a){char c;while(!(((c=getchar())>='0')&&(c<='9')));a=c-'0';while(((c=getchar())>='0')&&(c<='9'))(a*=10)+=c-'0';}
inline int lower(int x){
int l=1,r=n,mid,t;
while(l<=r)if(b[mid=(l+r)>>1]<=x)l=(t=mid)+1;else r=mid-1;
return t;
}
inline void add(int x,int y){for(;x<=n;x+=x&-x)bit[x]+=y;}
inline ll ask(int x){ll t=0;for(;x;x-=x&-x)t+=bit[x];return t;}
void write(ll x){for(printf("0."),i=0;i<20;i++)x*=10,printf("%d",x/all),x%=all;puts("");}
int main(){
for(read(n),i=1;i<=n;i++)read(a[i]),b[i]=a[i];
for(std::sort(b+1,b+n+1),i=1;i<=n;i++)a[i]=lower(a[i]);
for(i=1;i<=n;i++)b[i]=ask(a[i]-1),c[i]=i-1-ask(a[i]),add(a[i],1);
for(i=1;i<=n;i++)bit[i]=0;
for(i=n;i;i--)d[i]=ask(a[i]-1),f[i]=ask(a[i]),e[i]=n-i-f[i],add(a[i],1);
for(i=1;i<=n;i++)bit[i]=0;
for(i=n;i;i--){
c1+=1LL*b[i]*e[i],c6+=1LL*c[i]*d[i];
c5+=1LL*b[i]*c[i],c2+=ask(a[i]-1)-1LL*d[i]*(d[i]-1)/2,add(a[i],b[i]+f[i]);
}
c5-=c2;
for(i=1;i<n-i+1;i++)std::swap(a[i],a[n-i+1]);
for(i=1;i<=n;i++)bit[i]=0;
for(i=1;i<=n;i++)b[i]=ask(a[i]-1),c[i]=i-1-ask(a[i]),add(a[i],1);
for(i=1;i<=n;i++)bit[i]=0;
for(i=n;i;i--)d[i]=ask(a[i]-1),f[i]=ask(a[i]),add(a[i],1);
for(i=1;i<=n;i++)bit[i]=0;
for(i=n;i;i--)c3+=1LL*b[i]*c[i],c4+=ask(a[i]-1)-1LL*d[i]*(d[i]-1)/2,add(a[i],b[i]+f[i]);
c3-=c4;
all=c1+c2+c3+c4+c5+c6;
write(c1),write(c2),write(c3),write(c4),write(c5),write(c6);
return 0;
}
BZOJ2837 : 小强的形状的更多相关文章
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- 关于Three.js基本几何形状之SphereGeometry球体学习
一.有关球体SphereGeometry构造函数参数说明 <1>.SphereGeometry(radius, widthSegments, heightSegments, phiStar ...
- Css3新特性应用之形状
一.自适应椭圆 * border-radius特性: * 可以单独指定水平和垂直半径,并且值可以是百分比,用/(斜杠)分隔这两个值即可(可以实现自适应宽度椭圆). * 还可以单独指定四个角 ...
- Html中自定义鼠标的形状
Html中自定义鼠标的形状 <html> <head> <title>自定义的鼠标形状</title> <meta http-equiv=&quo ...
- visio二次开发——图纸解析之形状
今天有空,下班前补齐解析visio图形形状的方法,包含图形背景色.字体颜色.备注信息.形状数据取值. /// <summary> /// 设置形状的选择属性 /// </summar ...
- C# PPT 为形状设置三维效果
在PPT中,形状是非常重要的元素.3-D形状,立体多元,给人耳目一新的感觉.在幻灯片中添加3-D效果形状,必然会为PPT的整体效果增色不少.为形状设置三维格式时,可设置棱台,轮廓线,表面效果等. 本篇 ...
- 使用css打造形形色色的形状!
使用css打造形形色色的形状! css是非常强大的工具,如果我们掌握的好,那么许多复杂的形状不需要使用图片而直接使用css完成即可,这不仅有利于减少http请求以增强性能还便于日后的管理和维护,一举两 ...
- MFC 鼠标 移动到某控件时 修改鼠标形状为手的形状
响应窗体的 OnSetCursor 消息响应 鼠标移动到某空间时改变 形状 BOOL CQQBulkDlg::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT m ...
- CSS/HTML 改变鼠标指针形状
改变鼠标指针形状的方法有两种:第一种:用的来改变鼠标指针形状.另一种是:利用第三方控件的方法,而我自己最常用的是第一种:用css样式表来改变鼠标指针形状 我们先来看第一种:用来改变鼠标指针形状. 有些 ...
随机推荐
- Unity游戏开发之“屏幕截图”
原地址:http://sygame.lofter.com/post/117105_791680 在unity游戏开发中,可能会遇到在游戏中截屏的效果.这儿提供两种截屏方法.(方法二提供显示截图缩略图代 ...
- ASP注入靶机
ASP: <% Dim Db,MyDbPath dim conn '可修改设置一:========================定义数据库类别,1为SQL数据库,0为Access数据库 ...
- C#父类子类对象关系
案例: 主要有Vehicle.cs Airplane.cs Car.cs 3个类. Car和Airplane都继承与Vehicle类.Vehicle中Drive为虚方法,可在子类中重写,父类引 ...
- 一起做RGB-D SLAM (1)
前言 2016.11 更新 增加了对16.04的支持. 整理了过时的代码. SLAM,即Simultaneous Localization and Mapping,中文译作同时定位与地图创建,是近几十 ...
- 用Maven插件生成Mybatis代码/数据库
现在代码管理基本上是采用Maven管理,Maven的好处此处不多说,大家用百度搜索会有很多介绍,本文介绍一下用Maven工具如何生成Mybatis的代码及映射的文件. 一.配置Maven pom.xm ...
- Linux 实现rsyslog日志里面的IP地址记录 未测试
之前我是在bashrc中添加了一句,让系统操作日志时向rsyslog发送一份内容,现在只要在发送的时候,自己再获取下当前的远程登录IP加进去就可以,像这样 /etc/bashrc sshClientI ...
- (0,eval)('this')与eval的区别
看doT源码的时候,看到了这么一句代码: global = (function(){ return this || (0,eval)('this'); }()); global.doT = doT; ...
- hdparm测试硬盘性能
<1>Centos安装hdparm测试硬盘性能 一.安装hdparm yum install hdparm -y Linux学习,http:// linux.it.net.cn 二.评估读 ...
- 在windows下用cygwin和eclipse搭建cocos2dx的android开发环境
在windows下用cygwin和eclipse搭建cocos2dx(2.1.4)的android开发环境,2013-8-1更新. 一.准备工作 需要下载和安装以下内容,请根据自己的操作系统选择x86 ...
- LightOJ 1247 Matrix Game (尼姆博弈)
A - Matrix Game Time Limit:2000MS Memory Limit:32768KB 64bit IO Format:%lld & %llu Submi ...