mirror of
https://gitcode.com/Zengtudor/alg2025.git
synced 2025-09-06 02:00:36 +00:00
fix(P6278.cpp): 修正二进制索引树实现中的错误
修复lb函数中错误的变量使用,将'n'改为'val' 修正upd函数中错误的加法操作,将'n'改为'add' 优化逆序对计算逻辑,调整索引计算方式
This commit is contained in:
parent
9db115d255
commit
e018452176
@ -9,12 +9,12 @@ ll n,ans=0;
|
|||||||
std::vector<ll> a,t,s;
|
std::vector<ll> a,t,s;
|
||||||
|
|
||||||
static inline ll lb(ll val){
|
static inline ll lb(ll val){
|
||||||
return n&-n;
|
return val&(-val);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void upd(ll idx,ll add){
|
static inline void upd(ll idx,ll add){
|
||||||
while (idx<=n) {
|
while (idx<=n) {
|
||||||
t[idx]+=n;
|
t[idx]+=add;
|
||||||
idx+=lb(idx);
|
idx+=lb(idx);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -29,7 +29,7 @@ static inline ll get(ll idx){
|
|||||||
}
|
}
|
||||||
|
|
||||||
int main(){
|
int main(){
|
||||||
std::iostream::sync_with_stdio(false);
|
std::ios::sync_with_stdio(false);
|
||||||
std::cin.tie(nullptr);
|
std::cin.tie(nullptr);
|
||||||
|
|
||||||
std::cin>>n;
|
std::cin>>n;
|
||||||
@ -40,13 +40,16 @@ int main(){
|
|||||||
std::cin>>a[i];
|
std::cin>>a[i];
|
||||||
++a[i];
|
++a[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
for(ll i=1;i<=n;++i){
|
for(ll i=1;i<=n;++i){
|
||||||
s[i]=get(a[i]);
|
ll x = n - a[i] + 2;
|
||||||
upd(a[i],1);
|
s[a[i]] += get(x-1);
|
||||||
|
upd(x, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::cout<<"0\n";
|
std::cout<<"0\n";
|
||||||
for(ll i=1;i<=n;i++){
|
for(ll i=2;i<=n;i++){
|
||||||
ans+=s[i];
|
ans += s[i-1];
|
||||||
std::cout<<ans<<"\n";
|
std::cout<<ans<<"\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user