mirror of
https://gitcode.com/Zengtudor/alg2025.git
synced 2025-09-06 02:00:36 +00:00
feat: 添加P3608.cpp实现逆序对统计与不平衡检测
实现基于树状数组的逆序对统计功能,用于检测序列中的不平衡元素。 通过排序和离散化处理输入数据,计算每个元素左右两侧的逆序对数量, 并判断是否满足不平衡条件(max(l,r) > min(l,r)*2)。
This commit is contained in:
parent
c5c309b935
commit
6acad9f13b
65
src/9/P3608.cpp
Normal file
65
src/9/P3608.cpp
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
#include <algorithm>
|
||||||
|
#include <cstdint>
|
||||||
|
#include <cstdio>
|
||||||
|
#include <iostream>
|
||||||
|
#include <istream>
|
||||||
|
#include <map>
|
||||||
|
#include <vector>
|
||||||
|
using ll = int64_t;
|
||||||
|
|
||||||
|
ll n,ans=0;
|
||||||
|
std::vector<ll> a,raw;
|
||||||
|
std::map<ll, ll> m;
|
||||||
|
std::vector<ll> t;
|
||||||
|
|
||||||
|
static inline constexpr ll lb(ll n){
|
||||||
|
return n&(-n);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void upd(ll idx, ll add){
|
||||||
|
while(idx<=n){
|
||||||
|
t[idx]+=add;
|
||||||
|
idx+=lb(idx);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline ll get(ll idx){
|
||||||
|
ll res=0;
|
||||||
|
while(idx){
|
||||||
|
res+=t[idx];
|
||||||
|
idx-=lb(idx);
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(){
|
||||||
|
std::iostream::sync_with_stdio(false);
|
||||||
|
std::cin.tie(nullptr);
|
||||||
|
|
||||||
|
std::cin>>n;
|
||||||
|
raw.resize(n+1);
|
||||||
|
t.resize(n+1);
|
||||||
|
for(ll i=1;i<=n;++i){
|
||||||
|
std::cin>>raw[i];
|
||||||
|
}
|
||||||
|
a=raw;
|
||||||
|
std::sort(a.begin()+1,a.end());
|
||||||
|
for(ll i=1;i<=n;i++){
|
||||||
|
m[a[i]]=i;
|
||||||
|
}
|
||||||
|
for(ll i=1;i<=n;i++){
|
||||||
|
raw[i]=m[raw[i]];
|
||||||
|
// printf("raw[%lld]=%lld\n",i,raw[i]);
|
||||||
|
}
|
||||||
|
for(ll i=1;i<=n;i++){
|
||||||
|
ll g=n-raw[i];
|
||||||
|
ll l=i-1-get(raw[i]);
|
||||||
|
ll r = g-l;
|
||||||
|
// printf("i=%lld, l=%lld, r=%lld\n",i,l,r);
|
||||||
|
if(std::max(l,r)>std::min(l,r)*2){
|
||||||
|
ans++;
|
||||||
|
}
|
||||||
|
upd(raw[i],1);
|
||||||
|
}
|
||||||
|
std::cout<<ans<<"\n";
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user