要求的是所有的存在s,w都比它大的物品的物品的个数
正着不好去重
倒着枚举s,当前位置后面的物品s都比它大,减掉w比他小的,就能判断是否有w也比他大的
如果有 ans++
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define sc(x) scanf("%lld",&x);
#define si signed
int n;
int M[100005];
int S[100005];
int I[100005];
int m[100005];
int B[100005];
bool cmp(int x,int y)
{
return S[x]<S[y];
}
void add(int x)
{
int i=x;
for(;i<=100000;i+=(i&(-i))){
B[i]++;
}
}
int ask(int x)
{
int i=x;
int ans=0;
for(;i>0;i-=(i&(-i))){
ans+=B[i];
//cout<<ans<<endl;
}
return ans;
}
si main()
{
sc(n);
for(int i=1;i<=n;i++){
sc(M[i])sc(S[i])
I[i]=i;m[i]=M[i];
}
sort(I+1,I+n+1,cmp);
sort(m+1,m+1+n);
int len=unique(m+1,m+1+n)-(m+1);
for(int i=1;i<=n;i++)
M[i]= lower_bound(m+1,m+1+len,M[i])-(m);
int ans=0;
//cout<<"TRUE"<<endl;
for(int i=n;i>=1;i--){
int t=ask(M[I[i]]);
if(n-t-i>0)ans++;
//cout<<ans<<endl;
add(M[I[i]]);
}
cout<<ans<<'\n';
}