...............................................................................................................................................................................................................................................................
东海岸与西海岸分别有N和M个城市,现在修高速公路连接东西海岸的城市,求交点个数。
写了一天,题目没理解完,Wrong Answer了快10次了,就是最大值没解决。
.............................................................................................................................................................................................................................................................
#include<stdio.h> #include <iostream> #include<string.h> #include<stdlib.h> #include<math.h> #include<algorithm> #include<list> #include<vector> #pragma comment(linker,"/STACK:102400000,102400000") using namespace std; #define MAX 1005 int k,n,m; long long tree[MAX]; struct way { int x; int y; }; way aa[MAX*1000]; bool cmp(way o1,way o2) { if(o1.x==o2.x) return o1.y<o2.y; else return o1.x<o2.x; } int lowbit(int idx) { return idx&(-idx); } void update(int idx,int val) { while(idx<=MAX) { tree[idx]+=val; idx+=lowbit(idx); } } int sum(int idx) { int sum=0; while(idx>0) { sum+=tree[idx]; idx-=lowbit(idx); } return sum; } int main() { int i,val,t,count=1; scanf("%d",&t); while(t--) { memset(tree,0,sizeof(tree)); scanf("%d %d %d",&n,&m,&k); for(i=0;i<k;i++) { scanf("%d%d",&aa[i].x,&aa[i].y); } sort(aa,aa+k,cmp); long long s=0; for(i=0;i<k;i++) { update(aa[i].y,1); s+=i+1-sum(aa[i].y); } printf("Test case %d: %lld\n",count++,s); } return 0; }