这题的关键是方法。怎么才是相交的呢?一种方法是线段a的左边比线段b的左边小,同时a的右边比b的右边大。这时就可以构成一个相交。于是,我们可以根据左边的值来做降序排列,然后根据线段树来统计crosses。
排名还在上升中。加油!
#include#include #include #include #include #define MAXN 1005 using namespace std; int M,N,K; int C[MAXN]; struct Node{ int n,m; }nn[MAXN*MAXN]; bool cmp(Node a,Node b){ if(a.m==b.m) return a.n>b.n; //避免同端点的也算进去。 else return a.m>b.m; } inline int lowbit(int i){ return i&(-i); } void add(int i){ for(;i 0 ;s+=C[i],i-=lowbit(i)); return s; } int main() { int Case; long long nSum; int i,j,x; //freopen("acm.in","r",stdin); scanf("%d",&Case); for(i=0 ;i