題意:
題解:
AC代碼
/*
Author:zzugzx
Lang:C++
Blog:blog.csdn.net/qq_43756519
*/
#include<bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define pb push_back
#define mp make_pair
#define all(x) (x).begin(),(x).end()
#define endl '\n'
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
//const int mod=1e9+7;
const int mod=998244353;
const double eps = 1e-10;
const double pi=acos(-1.0);
const int maxn=1e6+10;
const ll inf=0x3f3f3f3f;
const int dir[4][2]={{0,1},{1,0},{0,-1},{-1,0}};
ll n,ans,c[maxn];
struct node{
ll a,b,c;
}p[maxn],p1[maxn];
bool cmp(node a,node b){
return a.a<b.a;
}
int lowbit(int x){
return x&(-x);
}
void add(int x,ll v){
while(x<maxn){
c[x]+=v;
x+=lowbit(x);
}
}
ll query(int x){
ll res=0;
while(x){
res+=c[x];
x-=lowbit(x);
}
return res;
}
void cdq(int l,int r){
if(l==r)return;
int mid=l+r>>1;
cdq(l,mid);cdq(mid+1,r);
int i=l,j=mid+1,k=l;
while(i<=mid&&j<=r){
if(p[i].b<p[j].b)add(p[i].c,1),p1[k++]=p[i++];
else ans+=query(p[j].c),p1[k++]=p[j++];
}
while(i<=mid)add(p[i].c,1),p1[k++]=p[i++];
while(j<=r)ans+=query(p[j].c),p1[k++]=p[j++];
for(int i=l;i<=mid;i++)add(p[i].c,-1);
for(int i=l;i<=r;i++)p[i]=p1[i];
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
cin>>n;
for(int i=1;i<=n;i++)cin>>p[i].a>>p[i].b>>p[i].c;
sort(p+1,p+1+n,cmp);
cdq(1,n);
cout<<n*(n-1)/2-ans;
return 0;
}