World is Exploding HDU
来源:互联网 发布:js中input设置默认值 编辑:程序博客网 时间:2024/06/06 19:05
Given a sequence A with length n,count how many quadruple (a,b,c,d) satisfies:
Input
The input consists of multiple test cases.
Each test case begin with an integer n in a single line.
The next line contains n integers
1≤n≤500001≤n≤50000
0≤Ai≤1e90≤Ai≤1e9
Output
For each test case,output a line contains an integer.
Sample Input
4
2 4 1 3
4
1 2 3 4
Sample Output
1
0
最近总是做到这个类型的题,发现离散化和树状数组捆绑的很紧密,如果发现题目的要求之和数于数之间的大小有关系而非具体的值,那么可以离散化了,
这题的思路是找出数列里的所有的正序对(
#include<iostream>#include<cstdio>#include<algorithm>#include<cmath>#include<cstring>#define N 50005using namespace std;int n;int a[N];int id[N];int c[N];int Lmin[N],Rmin[N],Lmax[N],Rmax[N];int lowBit(int x){ return x&-x;}int sum(int x){ int ans=0; while(x>0) { ans+=c[x]; x-=lowBit(x); } return ans;}void change(int x,int p){ while(x<=n) { c[x]+=p; x+=lowBit(x); }}int main(){ while(scanf("%d",&n)==1) { memset(Lmin,0,sizeof(Lmin)); memset(Rmin,0,sizeof(Rmin)); memset(Lmax,0,sizeof(Lmax)); memset(Rmax,0,sizeof(Rmax)); for(int i=0;i<n;i++) { scanf("%d",a+i); id[i]=a[i]; } sort(id,id+n); int num=unique(id,id+n)-id; for(int i=0;i<n;i++) a[i]=lower_bound(id,id+num,a[i])-id+1; int num1=0,num2=0; memset(c,0,sizeof(c)); for(int i=0;i<n;i++) { Lmin[i]=sum(a[i]-1); num1+=Lmin[i]; Lmax[i]=sum(n)-sum(a[i]); num2+=Lmax[i]; change(a[i],1); } memset(c,0,sizeof(c)); for(int i=n-1;i>=0;i--) { Rmin[i]=sum(a[i]-1); Rmax[i]=sum(n)-sum(a[i]); change(a[i],1); } long long ans=(long long)num1*num2; for(int i=0;i<n;i++) { ans-=Lmin[i]*Rmin[i]; ans-=Lmax[i]*Rmax[i]; ans-=Lmax[i]*Lmin[i]; ans-=Rmax[i]*Rmin[i]; } printf("%lld\n",ans); }}
阅读全文
0 0
- World is Exploding HDU
- HDU 5792 World is Exploding
- HDU 5792 World is Exploding
- HDU 5792 World is Exploding
- HDU 5792 World is Exploding
- HDU 5792 World is Exploding
- Hdu 5792 World is Exploding
- hdu 5792 World is Exploding 树状数组
- HDU-5792-World is Exploding-树状数组
- HDU 5792 World is Exploding(BIT)
- 多校 World is Exploding
- hdu5792 World is Exploding
- World is Exploding
- HDU 5792 World is Exploding (树状数组逆序对)
- HDU-5792-World is Exploding(树状数组+离散化)
- Hdu-5792 World is Exploding(简单容斥)
- hdu 5792 World is Exploding 离散化+树状数组
- hdu 5792 World is Exploding (树状数组)
- TortoiseSVN教程
- 排列问题
- SQLServer --自定义带输入参数的存储过程
- JUC源码解析(6)-locks-AbstractQueuedSynchronizer
- 二进制和十进制之间的转换
- World is Exploding HDU
- Java面试知识点整理
- Python 判断文件是否存在的三种方法
- Mac 烧写树莓派系统
- linux常用命令(zip,gzip,bzip2,tar)
- caffe下两种方法测试mnist
- C++primer阅读笔记----------模板与泛型编程
- 浅谈继承和抽象类
- Listary的使用