ZROJ369 Tiny Counting - 容斥 - 树状数组 -
题目链接:http://zhengruioi.com/contest/101/problem/369
题解:
枚举 ,表示 钦定了 或者 位于 处
不妨设是 位于 处, 同理
位于 ,而且 是逆序对, 就是位于 的任意顺序对,这利用树状数组就能简单维护
但是这有很多不合法的情况:
- (注意这个要乘以 2 因为对于 和 分别算了两次)
容斥减去即可,这四种都可以用树状数组解决
// by SkyRainWind
#include <bits/stdc++.h>
#define mpr make_pair
#define debug() cerr<<"Yoshino\n"
#define rep(i,a,b) for(int (i)=(a);(i)<=(b);(i)++)
#define pii pair<int,int>
using namespace std;
typedef long long ll;
typedef long long LL;
const int inf = 1e9, INF = 0x3f3f3f3f, maxn = 1e5+5;
int n;
int a[maxn];
map<int,int>mp,trans;
struct fen{
int a[maxn];
int N = -1;
void init(int up){
N = up;
}
int lb(int x){return x & (-x);}
void add(int x,int del){ // init N!!!
assert(N != -1);
for(int i=x;i<=N;i+=lb(i)){
a[i] += del;
}
}
int query(int x){
int res = 0;
for(int i=x;i;i-=lb(i))res += a[i];
return res;
}
int query(int l,int r){
return query(r) - query(l-1);
}
}rev,sev,nrev,nsev;
int gr[maxn], le[maxn];
signed main(){
scanf("%d",&n);
for(int i=1;i<=n;i++)scanf("%d",&a[i]), mp[a[i]] = 1;
int cnt = 0;
for(auto it : mp)trans[it.first] = ++ cnt;
for(int i=1;i<=n;i++)a[i] = trans[a[i]];
rev.init(cnt); sev.init(cnt);
nrev.init(cnt); nsev.init(cnt);
rev.add(cnt - a[1] + 1, 1);sev.add(a[1], 1);
ll revcnt=0, sevcnt=0, ans = 0;
ll del1 = 0;
for(int i=2;i<=n;i++){
int tr = rev.query(cnt - a[i] + 1 - 1), sr = sev.query(a[i] - 1);
revcnt += tr;sevcnt += sr;
ans += 1ll * tr * sevcnt;
ans += 1ll * sr * revcnt;
rev.add(cnt - a[i] + 1, 1);sev.add(a[i], 1);
del1 += 2ll*tr*sr; // #2
gr[i] = tr, le[i] = sr;
}
nrev.add(cnt - a[n] + 1, 1); nsev.add(a[n], 1);
ll del2 = 0;
for(int i=n-1;i>=1;i--){
int tr = nrev.query(cnt - a[i] + 1 - 1), sr = nsev.query(a[i] - 1);
del2 += 1ll*gr[i]*tr + 1ll*le[i]*sr + 1ll*tr*sr; // #3 #4 #1
nrev.add(cnt - a[i] + 1, 1); nsev.add(a[i], 1);
}
cout<<ans - del1 - del2;
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示