Leetcode_1395. 统计作战单位数
求升序或降序三元组的数量
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;
}
};
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步