fix(P6278.cpp): 修正二进制索引树实现中的错误

修复lb函数中错误的变量使用,将'n'改为'val'
修正upd函数中错误的加法操作,将'n'改为'add'
优化逆序对计算逻辑,调整索引计算方式
This commit is contained in:
Zengtudor 2025-09-01 20:28:21 +08:00
parent 9db115d255
commit e018452176

View File

@ -9,12 +9,12 @@ ll n,ans=0;
std::vector<ll> a,t,s;
static inline ll lb(ll val){
return n&-n;
return val&(-val);
}
static inline void upd(ll idx,ll add){
while (idx<=n) {
t[idx]+=n;
t[idx]+=add;
idx+=lb(idx);
}
}
@ -29,7 +29,7 @@ static inline ll get(ll idx){
}
int main(){
std::iostream::sync_with_stdio(false);
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
std::cin>>n;
@ -40,13 +40,16 @@ int main(){
std::cin>>a[i];
++a[i];
}
for(ll i=1;i<=n;++i){
s[i]=get(a[i]);
upd(a[i],1);
ll x = n - a[i] + 2;
s[a[i]] += get(x-1);
upd(x, 1);
}
std::cout<<"0\n";
for(ll i=1;i<=n;i++){
ans+=s[i];
for(ll i=2;i<=n;i++){
ans += s[i-1];
std::cout<<ans<<"\n";
}
}
}