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;
}
转载于:https://www.cnblogs.com/clrs97/p/4858143.html
BZOJ2837 : 小强的形状相关推荐
- 赤兔四足机器人的作用_跑得快,打不死!清华大学开发“小强”机器人,壮汉狂踩也挡不住前进步伐...
大数据文摘编辑部出品 提到蟑螂,很多同学都深恶痛绝. 这种身型小巧的虫子不仅跑得快.繁殖能力强,而且超级抗打抗压,在所有的环境下都能顽强地生存下去. 12mm高的蟑螂可以躲进4mm的缝隙 也难怪周星驰 ...
- 清华伯克利造出机械小强:承重200万倍踩不死,跑得和真蟑螂一样快
郭一璞 安妮 发自 凹非寺 量子位 报道 | 公众号 QbitAI 打不死的小强,真的是太讨厌了! 既然打不死,那--干脆仿造一个出来,为我所用,岂不是爽歪歪? 还真有人仿造成功了,最新的一期Sci ...
- python异或运算怎么算_小强学Python+OpenCV之-1.4.4掩膜mask及位运算(与、或、非、异或)...
问题引入 在小强学Python+OpenCV之-1.4.2裁剪一节,我们使用的是numpy数组切片功能实现图片区域的裁剪. 那么,如果我们想要裁剪图像中任意形状的区域时,应该怎么办呢? 答案是,使用掩 ...
- 自制小强机器人,能看能听能说能画
1 概述 首先可以先看下小强机器人上个版本: 自己制作智能语音机器人(基于jetson nano)自己制作智能语音机器人(基于jetson nano)_智能语音机器人开发_AI强仔的博客-CSDN博客 ...
- view(*args)改变张量的大小和形状_pytorch reshape numpy
20201227 这个方法是在不改变数据内容的情况下,改变一个数组的格式,参数及返回值,官网介绍: a:数组–需要处理的数据 newshape:新的格式–整数或整数数组,如(2,3)表示2行3列,新的 ...
- 目标形体形状轮廓重建:ICCV2019论文解析
目标形体形状轮廓重建:ICCV2019论文解析 Shape Reconstruction using Differentiable Projections and Deep Priors 论文链接: ...
- 人体姿态和形状估计的视频推理:CVPR2020论文解析
人体姿态和形状估计的视频推理:CVPR2020论文解析 VIBE: Video Inference for Human Body Pose and Shape Estimation 论文链接:http ...
- CVPR2019论文解读:单眼提升2D检测到6D姿势和度量形状
CVPR2019论文解读:单眼提升2D检测到6D姿势和度量形状 ROI-10D: Monocular Lifting of 2D Detection to 6D Pose and Metric Sha ...
- PyTorch 笔记(04)— Tensor 属性方法(获取元素个数numel/neleme、查看形状size()/shape、增减维度squeeze()/unsqueeze()、resize形状)
1. 获取 Tensor 元素个数 获取 Tensor 的元素个数 ,a.numel() 等价 a.nelement() In [1]: import torch as t In [5]: a = t ...
最新文章
- 关于pyecharts 地图显示添加数据的问题
- Datawhale两岁啦!
- 关于excel导入到封装成工具类jar包和web版门店收银网络无法无法连接上的解决方法...
- Struts2教程2:处理一个form多个submit
- 在Ubuntu中永久添加DNS
- 精通android布局,Android精通:View与ViewGroup,LinearLayout线性布局,RelativeLayout相对布局,ListView列表组件...
- c语言课全部由字母,C语言程序设计课程期末练习试题.doc
- endp 汇编start_飞思卡尔Kinetis L 汇编语言启动文件startup_MK25Z4简单分析
- ubuntu下定时任务的执行
- 关于 jquery和js获取宽度时只能取整数,取不到小数点
- 算法 matlab_MATLAB遗传算法及其实现
- Java开发笔记(一百四十)JavaFX的选择框
- 解决EPSON LQ-630k打印机打印方向相反的问题(预览正常打印就不行)
- 五金行业智慧采购解决方案:应用集中采购协同管理系统激活企业数字化采购价值
- R语言中同比增长和环比增长
- 打鼾,是一种全身性疾病
- 专为风电筒叶片除冰研发的爬壁机器人
- 计算机常用英文简称扫盲
- Win98 源代码(特别版)
- iSubtitle for Mac(视频字幕制作软件)