HDU

来源:互联网 发布:古墓丽影8mac配置要求 编辑:程序博客网 时间:2024/06/07 02:04

题目链接


题意:


给出一个长度为n的整数序列,要求输出有多少个四元组{a,b,c,d}。

满足1<=a<b<=n,1<=c<d<=n,a!=b!=c!=d 且 Va<Vb && Vc>Vd


思路:



我们先定义几个数组:

lmi[i] 表示1...i-1 比i小的有几个

lmx[i] 表示1...i-1比i大的有几个

rmi[i] 表示i+1...n比i小的有几个

rmx[i] 表示i+1..n比i大的有几个.

这四个数组我们可以通过维护一个树状数组来实现,由于A很大,所以这里离散化一下.

    再定义一个sum数组,sun[i]表示1..i,lm[i]的和,这样就相当于求出有多少对Aa<Ab。

那么总结过为lmx[i]*sum[n]。

可是你会发现题目要求abcd不相等,我们这样会有重复,所以需要分情况讨论.

a=c(当a==c,b一定!=d,其余同理)  ans -= rmi[i]*rmx[i];

a=d ans -= lmx[i]*rmx[i];    

b=c  ans -= lmi[i]*rmi[i];

b=d ans -= lmx[i]*lmi[i];


#include<bits/stdc++.h>using namespace std;typedef long long ll;const int mod=1e9+7;const int maxn=5e4+10;int a[maxn],Hash[maxn];ll lmi[maxn],rmi[maxn],lmx[maxn],rmx[maxn];int n,m,s[maxn];ll sum[maxn];int lowbit(int x){return x&-x;}void add(int x,int d){while(x < maxn){s[x] += d;x += lowbit(x);}}ll _sum(int x){ll res = 0;while(x >= 1){res += s[x];x -= lowbit(x);}return res;}int main(){while(~scanf("%d",&n)){for(int i=1;i<=n;i++){scanf("%d",&a[i]);Hash[i]=a[i];}sort(Hash+1,Hash+1+n);m = unique(Hash+1,Hash+1+n) - (Hash+1);for(int i=1;i<=n;i++)a[i] = lower_bound(Hash+1,Hash+1+m,a[i]) - Hash;memset(s,0,sizeof s);sum[0]=0;for(int i=1;i<=n;i++){lmi[i] = _sum(a[i]-1);lmx[i] = (i-1) - _sum(a[i]);//printf("1 %d %d\n",i,_sum(m)); sum[i] = sum[i-1] + lmi[i];add(a[i],1);}memset(s,0,sizeof s);for(int i=n;i>=1;i--){rmi[i] = _sum(a[i]-1);rmx[i] = (n-i) - _sum(a[i]);//printf("2 %d %d\n",n-i+1,_sum(m)); add(a[i],1);}ll ans = 0;for(int i=1;i<=n;i++)ans += sum[n]*lmx[i];for(int i=1;i<=n;i++){ans -= rmi[i]*rmx[i];ans -= lmx[i]*rmx[i];ans -= lmi[i]*rmi[i];ans -= lmx[i]*lmi[i];}printf("%lld\n",ans);}return 0;}


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 快递号码写错了怎么办 网购下单后商家说没有货该怎么办 京东账号换手机怎么办 手机不发验证码怎么办 京东打白条分期付款额度不够怎么办 网易云音乐昵称被占用怎么办 ebay账号邮箱忘了怎么办 易贝账号邮箱忘了怎么办 运动鞋网上擦了黑鞋油怎么办 真皮鞋用水洗了怎么办 支付宝余额限额了怎么办 微信余额转账限额怎么办 微信充值话费充错了怎么办 京东白条月限额怎么办 淘手游上买的账号被找回了怎么办 手机看视频缓冲慢怎么办 wan口状态未连接怎么办 王者荣耀本地回放过期怎么办 qq邮件发错了怎么办 千叶钻戒换款怎么办 车钥匙掉厕所了怎么办 宿舍有个整晚磨牙的室友该怎么办 百度云照片压缩后模糊怎么办 手机点+号无法上传图片怎么办 支付宝账户支付功能关闭怎么办 一件衣服买小了怎么办 交行u盾密码忘了怎么办 老婆婚内出轨丈夫应该怎么办 微信小程序获取用户信息失败怎么办 拼多多砍价没有完成怎么办 微信人数上限了怎么办 微信5000人满了怎么办 微信朋友满了怎么办啊 失业金签到忘签怎么办 gec安全密码忘了怎么办 唯品会微信商城地址错怎么办跨省 电脑突然没网了怎么办 移动光猫只能连一台电脑怎么办 网上银行用户名和密码忘了怎么办 中国银行网银用户名忘了怎么办 中行企业网银证书过期怎么办