codeforces817b Makes And The Product
2017-06-20 16:59
204 查看
B. Makes And The Product
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output
After returning from the army Makes received a gift — an array a consisting of n positive
integer numbers. He hadn't been solving problems for a long time, so he became interested to answer a particular question: how many triples of indices (i, j, k) (i < j < k),
such that ai·aj·ak is
minimum possible, are there in the array? Help him with it!
Input
The first line of input contains a positive integer number n (3 ≤ n ≤ 105) —
the number of elements in array a. The second line contains n positive
integer numbers ai (1 ≤ ai ≤ 109) —
the elements of a given array.
Output
Print one number — the quantity of triples (i, j, k) such that i, j and k are
pairwise distinct and ai·aj·ak is
minimum possible.
Examples
input
output
input
output
input
output
Note
In the first example Makes always chooses three ones out of four, and the number of ways to choose them is 4.
In the second example a triple of numbers (1, 2, 3) is chosen (numbers, not indices). Since there are two ways to choose an element 3,
then the answer is 2.
In the third example a triple of numbers (1, 1, 2) is chosen, and there's only one way to choose indices.
最小乘积必然是前3小的元素乘积
考虑第i个点的贡献 如果ai∈前三小的元素,那么他的贡献就是1-(i-1)中第二元素个数*(i+1)-n中第三元素个数+1-(i-1)第三元素个数*(i+1)-n第二元素个数
注意long long与特判第二元素==第三元素
代码:
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output
After returning from the army Makes received a gift — an array a consisting of n positive
integer numbers. He hadn't been solving problems for a long time, so he became interested to answer a particular question: how many triples of indices (i, j, k) (i < j < k),
such that ai·aj·ak is
minimum possible, are there in the array? Help him with it!
Input
The first line of input contains a positive integer number n (3 ≤ n ≤ 105) —
the number of elements in array a. The second line contains n positive
integer numbers ai (1 ≤ ai ≤ 109) —
the elements of a given array.
Output
Print one number — the quantity of triples (i, j, k) such that i, j and k are
pairwise distinct and ai·aj·ak is
minimum possible.
Examples
input
4 1 1 1 1
output
4
input
5
1 3 2 3 4
output
2
input
6
1 3 3 1 3 2
output
1
Note
In the first example Makes always chooses three ones out of four, and the number of ways to choose them is 4.
In the second example a triple of numbers (1, 2, 3) is chosen (numbers, not indices). Since there are two ways to choose an element 3,
then the answer is 2.
In the third example a triple of numbers (1, 1, 2) is chosen, and there's only one way to choose indices.
最小乘积必然是前3小的元素乘积
考虑第i个点的贡献 如果ai∈前三小的元素,那么他的贡献就是1-(i-1)中第二元素个数*(i+1)-n中第三元素个数+1-(i-1)第三元素个数*(i+1)-n第二元素个数
注意long long与特判第二元素==第三元素
代码:
#include <iostream> #include <cstdio> #include <algorithm> using namespace std; const int maxn=300000+10; int has[maxn]; int s[maxn],t[maxn]; int A[maxn],B[maxn]; int tot=0; inline int bs(int x){ int l=1,r=tot; while(l+1<r){ int mid=(l+r)>>1; if(has[mid]>x) r=mid-1; else l=mid; } if(has[r]==x) return r; return l; } int main(){ //freopen("a.in","r",stdin); //freopen("a.out","w",stdout); int n; scanf("%d",&n); //n=100000; for(int i=1;i<=n;i++){ scanf("%d",&A[i]); //A[i]=1; B[i]=A[i]; } int x,y,z; sort(B+1,B+n+1); long long ans=0; for(int i=1;i<=n;i++) if(B[i]!=B[i-1]) has[++tot]=B[i]; x=bs(B[1]),y=bs(B[2]),z=bs(B[3]); for(int i=1;i<=n;i++){ int u=bs(A[i]); t[u]++; } for(int i=1;i<=n;i++){ int u=bs(A[i]); t[u]--; if(u==x){ if(y==z) ans+=(long long)s[y]*t[z]; else ans+=(long long)s[y]*t[z]+(long long)s[z]*t[y]; } else if(u==y){ if(x==z) ans+=(long long)s[x]*t[z]; else ans+=(long long)s[x]*t[z]+(long long)s[z]*t[x]; } else if(u==z){ if(y==x) ans+=(long long)s[x]*t[y]; else ans+=(long long)s[x]*t[y]+(long long)s[y]*t[x]; } s[u]++; } cout<<ans<<endl; return 0; }
相关文章推荐
- codeforce817B Makes And The Product (排序)
- Educational Codeforces Round 23 B. Makes And The Product
- CodeForces 817 B.Makes And The Product(水~)
- Educational Codeforces Round 23#B. Makes And The Product
- Makes And The Product
- B. Makes And The Product
- Educational Codeforces Round 23 B - Makes And The Product
- 解决PS启动时的问题---Please uninstall and reinstall the product.
- [论文笔记] Leveraging the crowd as a source of innovation Does crowdsourcing represent a new model for product and service innovation? (SIGMIS-CPR, 2012)
- 解决安装photoshop提示”please uninstall and reinstall the product“
- Geometric regularity criterion for NSE: the cross product of velocity and vorticity 3: $u\times \f{\om}{|\om|}\cdot \f{\vLm^\be u}{|\vLm^\be u|}$
- Determine whether the product of a and b is even or odd.
- Six Sigma and the Product Development Cycle
- android studio打包签名错误please select the product flavors to build and sign
- 131.View the Exhibit and examine the structure of the PRODUCT, COMPONENT, and PDT_COMP tables.
- Registry values for ProductID and LocaleID for AutoCAD and the vertical products
- Geometric regularity criterion for NSE: the cross product of velocity and vorticity 4: $u\cdot \om$
- android studio 发布app出错:please select the product flavors to build and sign
- android studio 发布app出错:please select the product flavors to build and sign
- 解决安装photoshop提示”please uninstall and reinstall the product“