只有50分 QAQ,剩下的点mle,求助大佬!
查看原帖
只有50分 QAQ,剩下的点mle,求助大佬!
590801
clown__楼主2023/3/13 19:34
#include"iostream"
// #define ls (i<<1)
// #define rs (ls|1)
#define mid ((l+r)>>1)
using namespace std;
typedef long long ll;
const ll N=1e6+10;
ll tree[N<<3],ls[N<<3],rs[N<<3],n,cnt,root,ans;
void add(ll &i,ll l,ll r,ll k)
{
	if(i==0) i=++cnt;
	tree[i]++;
	if(l==r) return ;
	else if(k<=mid) add(ls[i],l,mid,k);
	else add(rs[i],mid+1,r,k);
}
ll sum(ll &i,ll l,ll r,ll k)
{
	if(k<l) return tree[i];
	else if(k>=r) return 0;
	else return sum(ls[i],l,mid,k)+sum(rs[i],mid+1,r,k); 
}
void solve()
{
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		ll x;
		cin>>x;
		add(root,0,1e9+10,x);
		ans+=sum(root,0,1e9+10,x);
	}
	cout<<ans<<"\n";
}
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	solve();
	return 0;
}
2023/3/13 19:34
加载中...