标签:rating int ris 三元组 add 1395 rib Leetcode 统计
求升序或降序三元组的数量
bit求出每个数两侧大于和小于的数的个数,然后枚举三元组中间数字。
code
class Solution {
public:
int c[100050];
int lowbit(int x){
return x&(-x);
}
void add(int i,int x){
int n=int(1e5);
while(i<=n){
c[i]+=x;
i+=lowbit(i);
}
}
int sum(int i){
int ans=0;
int n=int(1e5);
while(i){
ans+=c[i];
i-=lowbit(i);
}
return ans;
}
int numTeams(vector<int>& rating) {
int n=rating.size();
vector<int> les(n,0),rib(n,0),leb(n,0),ris(n,0);
int ans=0;
for(int i=n-1;i>=0;i--){
ris[i]=sum(rating[i]);
rib[i]=(n-1-i)-ris[i];
add(rating[i],1);
}
memset(c,0,sizeof(c));
for(int i=0;i<n;i++){
les[i]=sum(rating[i]);
leb[i]=i-les[i];
add(rating[i],1);
}
for(int i=0;i<n;i++){
ans+=les[i]*rib[i];
ans+=leb[i]*ris[i];
}
return ans;
}
};
标签:rating,int,ris,三元组,add,1395,rib,Leetcode,统计 来源: https://www.cnblogs.com/zxcoder/p/12867755.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。