标签:
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65768/65768 K (Java/Others)
Total Submission(s): 3176 Accepted Submission(s): 1195
1 /************************************************************************* 2 > File Name: code/hdoj/4022.cpp 3 > Author: 111qqz 4 > Email: rkz2013@126.com 5 > Created Time: 2015年08月01日 星期六 04时37分20秒 6 ************************************************************************/ 7 8 #include<iostream> 9 #include<iomanip> 10 #include<cstdio> 11 #include<algorithm> 12 #include<cmath> 13 #include<cstring> 14 #include<string> 15 #include<map> 16 #include<set> 17 #include<queue> 18 #include<vector> 19 #include<stack> 20 #define y0 abc111qqz 21 #define y1 hust111qqz 22 #define yn hez111qqz 23 #define j1 cute111qqz 24 #define tm crazy111qqz 25 #define lr dying111qqz 26 using namespace std; 27 #define REP(i, n) for (int i=0;i<int(n);++i) 28 typedef long long LL; 29 typedef unsigned long long ULL; 30 const int N=2E5+7; 31 const int inf = 0x7fffffff; 32 33 map<int,int>xmap,ymap; 34 multiset<int>x[N]; 35 multiset<int>y[N]; 36 int main() 37 { 38 int n,m; 39 while (scanf("%d %d",&n,&m)!=EOF) 40 { 41 if (n==0&&m==0) break; 42 for ( int i = 1 ; i <= n ; i++) 43 { 44 x[i].clear(); 45 y[i].clear(); 46 } 47 xmap.clear(); 48 ymap.clear(); 49 int tx,ty; 50 int cntx=0,cnty=0; 51 for ( int i = 1 ; i <= n ; i++ ) 52 { 53 scanf("%d %d",&tx,&ty); 54 if (!xmap[tx]) xmap[tx]=++cntx; 55 if (!ymap[ty]) ymap[ty]=++cnty; 56 x[xmap[tx]].insert(ymap[ty]); 57 y[ymap[ty]].insert(xmap[tx]); 58 } 59 int c,d; 60 set<int>::iterator it; 61 for ( int i = 1; i <= m ; i++ ) 62 { 63 scanf("%d %d",&c,&d); 64 if (c==0) 65 { 66 cout<<x[xmap[d]].size()<<endl; 67 for ( it = x[xmap[d]].begin();it!=x[xmap[d]].end();it++) 68 { 69 y[*it].erase(xmap[d]); 70 } 71 x[xmap[d]].clear(); 72 } 73 else 74 { 75 cout<<y[ymap[d]].size()<<endl; 76 for ( it =y[ymap[d]].begin();it!=y[ymap[d]].end();it++) 77 { 78 x[*it].erase(ymap[d]); 79 80 } 81 y[ymap[d]].clear(); 82 } 83 } 84 printf("\n"); 85 } 86 87 return 0; 88 }
另外一种写法网上的代码(上一道题两种方法都写了,这道题懒得写了啦啦啦,反正都一样)
1 #include<iostream> 2 #include<cstring> 3 #include<string> 4 #include<cstdio> 5 #include<algorithm> 6 #include<map> 7 #include<set> 8 #define maxx 100005 9 using namespace std; 10 typedef map<int,multiset<int> > node; 11 node mx; 12 node my; 13 14 int cal(node &x,node &y,int p) 15 { 16 int res=x[p].size(); 17 multiset<int>::iterator it; 18 for(it=x[p].begin();it!=x[p].end();it++) 19 { 20 //x[p].erase(*it); //不能这样删除,这样删之后it无效 21 y[*it].erase(p); 22 } 23 x[p].clear(); //直接一次清空 24 return res; 25 } 26 27 int main() 28 { 29 int n,m,x,y,q,p; 30 while(scanf("%d%d",&n,&m)) 31 { 32 if(n==0&&m==0) break; 33 mx.clear(); my.clear(); 34 while(n--) 35 { 36 scanf("%d%d",&x,&y); 37 mx[x].insert(y); 38 my[y].insert(x); 39 } 40 while(m--) 41 { 42 scanf("%d%d",&q,&p); 43 if(q==0) printf("%d\n",cal(mx,my,p)); 44 else printf("%d\n",cal(my,mx,p)); 45 } 46 puts(""); 47 } 48 return 0; 49 }
标签:
原文地址:http://www.cnblogs.com/111qqz/p/4693706.html