CodeForces - 1430E(逆序对、思维)

90nwyn

2020-11-27 22:47:04

Personal

[题目链接](https://vjudge.net/problem/CodeForces-1430E) ------------ ------------ ```cpp #include <bits/stdc++.h> using namespace std; #define lowbit(x) (x&-x) typedef long long ll; const int M=2e5+5; int n,a[M],c[M]; char s[M]; ll ans; queue<int> q[M]; void upd(int i){for(;i<=n;i+=lowbit(i))c[i]++;} int que(int i){int y=0;for(;i;i-=lowbit(i))y+=c[i];return y;} int main() { scanf("%d%s",&n,s+1); for(int i=1;i<=n;i++) { int d=s[i]-'a'+1; q[d].push(i); } for(int i=n;i>=1;i--) { int d=s[i]-'a'+1; a[n-i+1]=q[d].front(); q[d].pop(); } for(int i=1;i<=n;i++) { upd(a[i]); ans+=i-que(a[i]); } printf("%lld\n",ans); return 0; } ```