hdu5792树状数组+容斥
来源:互联网 发布:淘宝卖农产品赚钱吗 编辑:程序博客网 时间:2024/06/05 19:21
http://acm.hdu.edu.cn/showproblem.php?pid=5792
思路:用树状数组统计每个数前面比他小的数lmin,大的数lmax,后面比他小的数rmin,大的数rmax,不考虑条件总的数量是lmin,lmax的和,去掉不满足的:a=c rmax[]*rmin[] ,a=d lmax[]*rmax[] , b=c lmin[]*rmin[] ,b=d lmin[]*lmax[]就是答案
#include <iostream>#include <cstdio>#include <cstring>#include <vector>#include <map>#include <algorithm>using namespace std;typedef long long ll;const int maxn=50005;int a[maxn],c[maxn];int lmin[maxn],lmax[maxn],rmin[maxn],rmax[maxn];vector<int>V;map<int,int>M;int lowbit(int x){ return x&(-x);}void update(int x,int add){ while(x<maxn) { c[x]+=add; x+=lowbit(x); }}int sum(int x){ int ret=0; while(x) { ret+=c[x]; x-=lowbit(x); } return ret;}int main(){ int n; while(~scanf("%d",&n)) { memset(c,0,sizeof(c)); V.clear(); M.clear(); for(int i=1;i<=n;i++) { scanf("%d",&a[i]); V.push_back(a[i]); } sort(V.begin(),V.end()); V.erase(unique(V.begin(),V.end()),V.end());//去重 for(int i=0;i<V.size();i++)//离散化 M[V[i]]=i+1; for(int i=1;i<=n;i++) a[i]=M[a[i]]; ll ans=0,ans1=0,ans2=0; for(int i=1;i<=n;i++) { update(a[i],1); lmin[i]=sum(a[i]-1);////当前位置左边比他小的有多少个 lmax[i]=sum(maxn-1)-sum(a[i]);////已经出现的数肯定是他左边的数,在这个时候记录数轴上有多少个数再减去小于等于的,就是大于的了 } memset(c,0,sizeof(c)); for(int i=n;i>=1;i--) { update(a[i],1); rmin[i]=sum(a[i]-1); rmax[i]=sum(maxn-1)-sum(a[i]); } for(int i=1;i<=n;i++) { ans1+=lmin[i];//升序的对数 ans2+=lmax[i];//逆序的对数 } ans=ans1*ans2; for(int i=1;i<=n;i++) ans-=(rmax[i]*rmin[i]+lmax[i]*rmax[i]+lmin[i]*rmin[i]+lmin[i]*lmax[i]); cout<<ans<<endl; } return 0;}
0 0
- hdu5792树状数组+容斥
- HDU5792(树状数组)
- HDU6102(树状数组 + 容斥 + 离线处理)
- hdu 6102 GCDispower 树状数组+容斥
- HDU5792(离散化+树状数组求逆序数)树状数组求逆序深入讲解
- HDU5792 World is Exploding(树状数组)2016 Multi-University Training Contest 5
- 2016 MUT 5 1012 World is Exploding(hdu5792) 【树状数组】
- hdu5792 多校5 World is Exploding【树状数组求逆序数】
- (多校第五场1012)HDU5792 World is Exploding(树状数组)
- HDU5792(2016多校第五场)——World is Exploding(树状数组,离散化)
- hdu5792 World is Exploding(多校第五场)树状数组求逆序对 离散化
- 【树状数组 + 容斥原理】 HDOJ 4947 GCD Array
- 1266 - Points in Rectangle[二维树状数组 + 容斥原理]
- HDU 4777 Rabbit Kingdom --容斥原理+树状数组
- Bzoj4361:isn:树状数组+动态规划+容斥
- hdoj5792求四元组的个数(容斥+树状数组)
- [BZOJ4361]isn(dp+树状数组+容斥原理)
- bzoj 4361: isn (容斥+DP+树状数组)
- 软链接
- opencv 3.0 DPM cascade contrib模块
- HDU 5137 How Many Maos Does the Guanxi Worth(最短路--dijkstra)
- EF的DBFirst方式访问SQLite
- 二分
- hdu5792树状数组+容斥
- Android初级教程:单击事件的传递机制初谈
- 修改jar包里面的class文件
- AcessibilityService 检测前台任意界面
- 20款最好用的wordpress图片相册插件
- 1720: 无聊的游戏(好强大的推理)
- go database/sql 源码分析(一)sql包设计哲学
- java语言基础入门——各类流的介绍
- 用户自定义函数