#include <bits/stdc++.h>
using namespace std;
long long n,m,k,C[100005];
struct ed{
long long rad,x,y;
}edge[200005];
inline bool cmp(ed a,ed b){
return a.rad<b.rad;
}
inline long long lowbit(long long x){
return x&-x;
}
inline void add(long long x,long long y){
for(long long i=x;i<=100000;i+=lowbit(i))
C[i]+=y;
return ;
}
inline long long ask(long long x){
long long ans=0;
for(long long i=x;i;i-=lowbit(i))
ans+=C[i];
return ans;
}
inline long long Ask(){
if(ask(1)<k) return 0;
long long l=1,r=100000;
while(l<r){
long long mid=l+r+1>>1;
if(ask(mid)>=k) l=mid;
else r=mid-1;
}
return l;
}
int main(){
scanf("%lld%lld%lld",&n,&m,&k);
long long a1,a2,r;
long long Ans=0,sum=0;
for(long long i=1;i<=n;++i){
scanf("%lld%lld%lld",&r,&a1,&a2);
if(a1>a2) swap(a1,a2);
edge[++sum].rad=a1,edge[sum].x=r,edge[sum].y=1,
edge[++sum].rad=a2,edge[sum].x=r,edge[sum].y=-1;
}
sort(edge+1,edge+sum+1,cmp);
long long t;
for(int i=1;i<=sum;++i){
add(1,edge[i].y);
if(edge[i].x<100000) add(edge[i].x+1,-edge[i].y);
t=Ask();
if(i<sum) Ans+=(t*t*(edge[i+1].rad-edge[i].rad));
}
printf("%lld\n",Ans);
return 0;
}
现在问题是一直WA10分,细节我也都检查过了,自己造了样例了,但是不行