2016 Multi-University Training Contest 5 World is Exploding
转载自:http://blog.csdn.net/queuelovestack/article/details/52096337
【题意】
给你一个序列A,选出四个下标不同的元素,下标记为a,b,c,d
a≠b≠c≠d,1≤a<b≤n,1≤c<d≤n
满足Aa<Ab,Ac>Ad
问能找到多少个这样的四元组(a,b,c,d)
【类型】
树状数组应用
【分析】
因为a<b,c<d,Aa<Ab,Ac>Ad
所以我们暂时称(a,b)为递增对,(c,d)为递减对
题目就转化成递增对*递减对-重复对
重复对包括如下四种:
①b,c一致
②a,c一致
③b,d一致
④a,d一致
那么我们该如何计算重复对呢?
考虑一致点下标为i,我们需要事先处理出位置i左边比它大的数的个数w[i],比它小的数的个数l[i];右边比它大的数的个数v[i],比它小的数的个数r[i],这样所有重复对的对数为l[i]*r[i]+l[i]*v[i]+w[i]*r[i]+w[i]*v[i]
而计算这些个数可以通过树状数组求解

【时间复杂度&&优化】
O(nlogn)
题目链接→HDU 5792 World is Exploding
感觉他写的真的很好,看完之后就大致可以懂了,但树状数组求的那块太简略,我补充下:
首先要做的是把输入s[i]离散化,因为题目说的是1e9。离散化之后就是每次检查前n项和,求l w数组,同理,更新v r数组,但注意,每次都要初始化c数组,因为c数组代表的就是第几位出现的次数,这两次相求会影响,所以每次都跟新。
这题还说明一个问题:树状数组和离散化合到一起有很大作用,比如这题,他就能求出递增对个数,利用的就是当求i的递增对个数时,求0~i-1中所有出现次数之和。
#include <bits/stdc++.h>
using namespace std; typedef long long ll;
const int INF=0x3f3f3f3f;
const ll LINF=0x3f3f3f3f3f3f3f3f;
#define PI(A) cout<<(A)<<endl
#define SI(N) cin>>(N)
#define SII(N,M) cin>>(N)>>(M)
#define cle(a,val) memset(a,(val),sizeof(a))
#define rep(i,b) for(int i=0;i<(b);i++)
#define Rep(i,a,b) for(int i=(a);i<=(b);i++)
#define reRep(i,a,b) for(int i=(a);i>=(b);i--)
#define dbg(x) cout <<#x<<" = "<<(x)<<endl
#define PIar(a,n) rep(i,n)cout<<a[i]<<" ";cout<<endl;
#define PIarr(a,n,m) rep(aa,n){rep(bb, m)cout<<a[aa][bb]<<" ";cout<<endl;}
const double EPS= 1e- ; /* ///////////////////////// C o d i n g S p a c e ///////////////////////// */ const int MAXN= + ; int n,s[MAXN],c[MAXN],a[MAXN];
ll l[MAXN],r[MAXN],w[MAXN],v[MAXN];
//树状数组
int lowbit(int t){return t&(-t);}
//在c[i]上加x
void add(int i,int x)
{
while(i<=n)
{
c[i]+=x;
i+=lowbit(i);
}
}
//求c[]的前n项和
int sum(int n)
{
int s=;
while(n>)
{
s+=c[n];
n-=lowbit(n);
}
return s;
} int main()
{
while(SI(n))
{
int k,Max=;
//su1是递增对个数 su2是递减对个数
ll ans=,su1=,su2=;
//输入
rep(i,n) {SI(s[i]);a[i]=s[i];}
//将s[]离散化
sort(a,a+n);
k=unique(a,a+n)-a;
rep(i,n)
{
s[i]=lower_bound(a,a+k,s[i])-a+;
Max=max(Max,s[i]);
}
//求递增对个数 和l w数组
cle(c,);
rep(i,n)
{
l[i]=sum(s[i]-);
w[i]=sum(Max)-sum(s[i]);
add(s[i],);
su1+=l[i];
}
//求递减对个数 和r v数组
cle(c,);
reRep(i,n-,)
{
r[i]=sum(s[i]-);
v[i]=sum(Max)-sum(s[i]);
add(s[i],);
su2+=r[i];
}
ans=su1*su2;
//减去重复的
rep(i,n)
ans-=l[i]*r[i]+l[i]*w[i]+v[i]*r[i]+v[i]*w[i];
PI(ans);
}
return ;
}
2016 Multi-University Training Contest 5 World is Exploding的更多相关文章
- 2016 Al-Baath University Training Camp Contest-1
2016 Al-Baath University Training Camp Contest-1 A题:http://codeforces.com/gym/101028/problem/A 题意:比赛 ...
- 2016 Al-Baath University Training Camp Contest-1 E
Description ACM-SCPC-2017 is approaching every university is trying to do its best in order to be th ...
- 2016 Al-Baath University Training Camp Contest-1 A
Description Tourist likes competitive programming and he has his own Codeforces account. He particip ...
- 2016 Al-Baath University Training Camp Contest-1 J
Description X is fighting beasts in the forest, in order to have a better chance to survive he's gon ...
- 2016 Al-Baath University Training Camp Contest-1 I
Description It is raining again! Youssef really forgot that there is a chance of rain in March, so h ...
- 2016 Al-Baath University Training Camp Contest-1 H
Description You've possibly heard about 'The Endless River'. However, if not, we are introducing it ...
- 2016 Al-Baath University Training Camp Contest-1 G
Description The forces of evil are about to disappear since our hero is now on top on the tower of e ...
- 2016 Al-Baath University Training Camp Contest-1 F
Description Zaid has two words, a of length between 4 and 1000 and b of length 4 exactly. The word a ...
- 2016 Al-Baath University Training Camp Contest-1 D
Description X is well known artist, no one knows the secrete behind the beautiful paintings of X exc ...
- 2016 Al-Baath University Training Camp Contest-1 C
Description Rami went back from school and he had an easy homework about bitwise operations (and,or, ...
随机推荐
- URAL 1077 Travelling Tours(统计无向图中环的数目)
Travelling Tours Time limit: 1.0 secondMemory limit: 64 MB There are N cities numbered from 1 to N ( ...
- wamp2.4允许局域网访问,如Android模拟器和手机
Apache 从2.2升级到 Apache2.4.x 后配置文件 httpd.conf 的设置方法有了大变化,以前是将 deny from all 全部改成 Allow from all 实现外网访问 ...
- 【转】BLE_CC2540_初学者入门指导
原文网址:http://www.deyisupport.com/question_answer/wireless_connectivity/bluetooth/f/103/t/61462.aspx 看 ...
- 论文笔记之: Recurrent Models of Visual Attention
Recurrent Models of Visual Attention Google DeepMind 模拟人类看东西的方式,我们并非将目光放在整张图像上,尽管有时候会从总体上对目标进行把握,但是也 ...
- easyUI之Combo
Combo组件为自定义下拉列表组件,无class的加载方式,主要是通过jquery的方式.它依赖于validatebox,可以用它的很多属性.例如: 前台: <div id="box& ...
- 一个PHP数组能占多大内存
最近用PHP读取一个大文件把相关数据存放到数组中,之后处理并输出, 读取过程中发现占用内存很大, 于是很好奇这个问题. 简单的写一个代码 <?php $m1 = memory_get_usage ...
- jquery 使用attr() 函数对复选框无效的原因,javascript那些事儿——properties和attributes
复选框是网站开发的时候经常用到的网页标签之一,常见的在页面上对复选框的操作包括取值和修改复选框的状态.在jquery中,常见的操作标签的值得函数为attr,然而在操作复选框的时候,通常采用的却是pro ...
- XMLHttpRequest 对象
XMLHttpRequest 对象 XML XSLTXML 解析器XMLHttpRequest 对象用于在后台与服务器交换数据. 什么是 XMLHttpRequest 对象? XMLHttpReque ...
- JavaScript中知而不全的this (转)
原文引自:http://www.cnblogs.com/snandy/p/4773184.html 都说 JavaScript 是一种很灵活的语言,这其实也可以说它是一个混乱的语言.它把函数式编程和面 ...
- linux下openoffice的安装和启动
下载openoffice的安装包(注意选择合适的安装包): http://www.openoffice.org/download/archive.html 一.安装openOffice1.使用tar ...