标签:include href for 情况 image space 逆序对 空间 clu
第1行:1个数N,N为点的数量(0 <= N <= 50000) 第2 - N + 1行:N个点的坐标,坐标为整数。(0 <= X[i], Y[i] <= 10^9)
输出斜率小于0的连线的数量。(2,3) (2,4)以及(2,3) (3,3)这2种情况不统计在内。
4 2 3 3 4 1 5 4 6
2
先以x升序,y升序排序,然后给y离散化,求y的逆序对
和POJ star 差不多
1 #include <algorithm> 2 #include <cstdio> 3 4 using namespace std; 5 6 const int N(50000+5); 7 int n,maxn=1e9; 8 struct Node 9 { 10 int x,y,mark; 11 }node[N],use[N]; 12 bool cmp1(Node a,Node b) 13 { 14 if(a.x==b.x) return a.y<b.y; 15 return a.x<b.x; 16 } 17 bool cmp2(Node a,Node b) 18 { 19 if(a.y==b.y) return a.mark<b.mark; 20 return a.y<b.y; 21 } 22 23 #define LL long long 24 #define lowbit(x) (x&((~x)+1)) 25 LL ans,t[N]; 26 void up(int x) 27 { 28 for(;x<=N+1;x+=lowbit(x)) t[x]++; 29 } 30 LL query(int x) 31 { 32 LL ret=0; 33 for(;x;x-=lowbit(x)) ret+=t[x]; 34 return ret; 35 } 36 37 int main() 38 { 39 scanf("%d",&n); 40 for(int i=1;i<=n;i++) 41 { 42 scanf("%d%d",&node[i].x,&node[i].y); 43 node[i].x++; node[i].y++;; 44 } 45 sort(node+1,node+n+1,cmp1); 46 for(int i=1;i<=n;i++) use[i].y=node[i].y,use[i].mark=i; 47 sort(use+1,use+n+1,cmp2); 48 for(int i=n;i>0;up(use[i--].mark)) 49 ans+=query(use[i].mark); 50 printf("%lld\n",ans); 51 return 0; 52 }
标签:include href for 情况 image space 逆序对 空间 clu
原文地址:http://www.cnblogs.com/Shy-key/p/7207531.html