World is Exploding

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 566    Accepted Submission(s): 263

Problem Description
Given a sequence A with length n,count how many quadruple (a,b,c,d) satisfies: a≠b≠c≠d,1≤a<b≤n,1≤c<d≤n,Aa<Ab,Ac>Ad.
 
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 A1,A2⋯An.
1≤n≤50000
0≤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
 Author
ZSTU
思路:找每个数的前面比他小的个数a[i],和前面比他大的个数,和后面比他小的b[i],和后面比他大的,这个用树状数组求,然后总的个数就是sum(a[i])*sum(b[i]);
然后就是去掉不合情况的,那么就是三个点有一个点是重合的,那么考虑每个节点,就是前面比他小的*后面比他小的,前面比他大的*后面后面比他大的,前面比他小的*前面比他大的,后面比他大的*后面比他小的。
复杂度(n*longn)
  1 #include <cstdio>
2 #include <cstdlib>
3 #include <cstring>
4 #include <cmath>
5 #include <iostream>
6 #include <algorithm>
7 #include <map>
8 #include <queue>
9 #include <vector>
10 #include<set>
11 using namespace std;
12 typedef long long LL;
13 typedef struct pp
14 {
15 int x;
16 int id;
17 } ss;
18 bool cmp(pp p,pp q)
19 {
20 return p.x<q.x;
21 }
22 int uu[6000];
23 ss dd[60000];
24 int a[60000];
25 LL zbit[60000];
26 LL ybit[60000];
27 int zz[60000];
28 int yy[60000];
29 int zz1[60000];
30 int yy1[60000];
31 int sumz(int i);
32 void addz(int i,int x,int t);
33 int sumy(int i);
34 void addy(int i,int x,int t);
35 int main(void)
36 {
37 LL i,j,k;
38 while(scanf("%lld",&k)!=EOF)
39 {
40 for(i=0; i<k; i++)
41 {
42 scanf("%d",&dd[i].x);
43 dd[i].id=i;
44 }
45 memset(zbit,0,sizeof(zbit));
46 memset(ybit,0,sizeof(ybit));
47 sort(dd,dd+k,cmp);
48 int id=1;
49 int ak=dd[0].x;
50 a[dd[0].id]=id;
51 for(i=1; i<k; i++)
52 {
53 if(ak!=dd[i].x)
54 {
55 id++;
56 ak=dd[i].x;
57 }
58 a[dd[i].id]=id;
59 }
60 for(i=0; i<k; i++)
61 {
62 LL ask=sumz(a[i]-1);
63 zz[i]=ask;
64 zz1[i]=i-sumz(a[i]);
65 addz(a[i],1,id);
66 }
67 for(i=k-1; i>=0; i--)
68 {
69 LL ask=sumy(a[i]-1);
70 yy[i]=ask;
71 yy1[i]=(k-i-1)-sumy(a[i]);
72 addy(a[i],1,id);
73 }
74 LL qian=0;
75 LL hou=0;
76 for(i=0; i<k; i++)
77 {
78 qian+=zz[i];
79 hou+=yy[i];
80 }
81 LL sum=qian*hou;
82 for(i=0; i<k; i++)
83 {
84 sum-=(LL)(zz[i])*(LL)(yy[i])+(LL)(zz[i])*(LL)(zz1[i])+(LL)(yy[i])*(LL)(yy1[i])+(LL)(zz1[i])*(LL)(yy1[i]);
85 }
86 printf("%lld\n",sum);
87 }
88 return 0;
89 }
90 int sumz(int i)
91 {
92 int s=0;
93 while(i>0)
94 {
95 s+=zbit[i];
96 i-=i&(-i);
97 }
98 return s;
99 }
100 void addz(int i,int x,int t)
101 {
102 while(i<=t)
103 {
104 zbit[i]+=x;
105 i+=i&(-i);
106 }
107 }
108 int sumy(int i)
109 {
110 int s=0;
111 while(i>0)
112 {
113 s+=ybit[i];
114 i-=i&(-i);
115 }
116 return s;
117 }
118 void addy(int i,int x,int t)
119 {
120 while(i<=t)
121 {
122 ybit[i]+=x;
123 i+=i&(-i);
124 }
125 }

World is Exploding(hdu5792)的更多相关文章

  1. hdu-5792 World is Exploding(容斥+树状数组)

    题目链接: World is Exploding Time Limit: 2000/1000 MS (Java/Others)     Memory Limit: 65536/65536 K (Jav ...

  2. HDU5792 World is Exploding(树状数组)

    一共6种情况,a < b且Aa < Ab, c < d 且Ac > Ad,这两种情况数量相乘,再减去a = c, a = d, b = c, b = d这四种情况,使用树状数组 ...

  3. HDU-5792 World is Exploding(树状数组)

    题目大意:给一个整数序列,统计四元组(a,b,c,d)的个数,满足条件1:a<>b<>c<>d:条件2:<a,b>组成一个顺序对,<c,d> ...

  4. hdu5792 World is Exploding(多校第五场)树状数组求逆序对 离散化

    题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=5792 题目描述:给你n个值,每个值用A[i]表示,然后问你能否找到多少组(a,b,c,d)四个编号,四 ...

  5. HDU 5792---2016暑假多校联合---World is Exploding

    2016暑假多校联合---World is Exploding Problem Description Given a sequence A with length n,count how many ...

  6. 2016 Multi-University Training Contest 5 World is Exploding

    转载自:http://blog.csdn.net/queuelovestack/article/details/52096337 [题意]给你一个序列A,选出四个下标不同的元素,下标记为a,b,c,d ...

  7. HDU 5792 World is Exploding 树状数组+枚举

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5792 World is Exploding Time Limit: 2000/1000 MS (Ja ...

  8. 2016 Multi-University Training Contest 5 1012 World is Exploding 树状数组+离线化

    http://acm.hdu.edu.cn/showproblem.php?pid=5792 1012 World is Exploding 题意:选四个数,满足a<b and A[a]< ...

  9. HDU 5792 World is Exploding (树状数组)

    World is Exploding 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5792 Description Given a sequence ...

随机推荐

  1. leetcode刷题之数组NO.4

    1.题目 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序. 示例: 输入: [0,1,0,3,12] 输出: [1,3,12,0,0] 说明: 必须在原数 ...

  2. A Child's History of England.12

    Dunstan, Abbot of Glastonbury Abbey, was one of the most sagacious of these monks. He was an ingenio ...

  3. 【leetcode】986. Interval List Intersections (双指针)

    You are given two lists of closed intervals, firstList and secondList, where firstList[i] = [starti, ...

  4. 【二分答案】CF1613 C. Poisoned Dagger

    题目:Problem - C - Codeforces 本题的优解是二分答案,但我其实不会二分,本质是用了两个指针作为边界,然后不断对半缩小范围来快速确定答案. 神奇的二分法 代码: #include ...

  5. 【Swift】CoreData的使用

    CoreData只是iOS数据持久化的其中一个方法,所有数据持久化如下 1.plist文件(属性列表),通常用于储存用户设置,也zhi可以用于存储捆绑的信息: 2.preference(偏好设置),常 ...

  6. Oracle异常处理——ORA-01502:索引或这类索引的分区处于不可用状态

    Oracle异常处理--ORA-01502:索引或这类索引的分区处于不可用状态参考自:https://www.cnblogs.com/lijiaman/p/9277149.html 1.原因分析经过查 ...

  7. android studio 使用 aidl(二)异步回调

    基础使用请移步 android studio 使用 aidl (一) 首先建立在server端建立两个aidl文件 ITaskCallback.aidl 用于存放要回调client端的方法 // IT ...

  8. Android 高级UI组件(一)GridView与ListView

    1.GridView 1.GridView学习 GridView和ListView都是比较常用的多控件布局,而GridView更是实现九宫图的首选 main.xml: <?xml version ...

  9. my42_Mysql基于ROW格式的主从同步

    模拟主从update事务,从库跳过部分update事务后,再次开始同步的现象 主库 mysql> select * from dbamngdb.isNodeOK; +----+--------- ...

  10. 阿里云esc 安装 mysql5.7.27

    1. 下载:  wget  http://repo.mysql.com/mysql57-community-release-el7-10.noarch.rpm 2. 安装: (1) yum -y in ...