Advertisement
Guest User

Untitled

a guest
Oct 16th, 2019
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.69 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define ll long long
  3. #define pb push_back
  4. #define pii pair<int,int>
  5. #define fi first
  6. #define se second
  7. #pragma GCC optimize("O3")
  8. #pragma GCC optimize("unroll-loops")
  9.  
  10. using namespace std;
  11.  
  12. main(){
  13. ios::sync_with_stdio(false);
  14. cin.tie(0);
  15. int n;
  16. cin>>n;
  17. vector< tuple<int,int,int,int> > v(n);
  18. vector<int> used(n,0);
  19. for(int i = 0; i < n; i++){
  20. int a,b,c;
  21. cin>>a>>b>>c;
  22. v[i] = make_tuple(a,b,c,i);
  23. }
  24. sort(v.begin(),v.end());
  25. map< pair<int,int>,vector<int> > m;
  26. for(int i = 0; i < n; i++){
  27. pair<int,int> t = {get<0>(v[i]),get<1>(v[i])};
  28. if(m.find(t)==m.end()) m[t] = vector<int>();
  29. m[t].pb(i);
  30. }
  31. for(auto t:m){
  32. //cout<<"x,y: "<<t.fi.fi<<" "<<t.fi.se<<" "<<endl;
  33. for(int i = 0; i+1 < t.se.size(); i+=2){
  34. //cout<<get<3>(v[t.se[i]])<<endl;
  35. cout<<get<3>(v[t.se[i]])+1<<" "<<get<3>(v[t.se[i+1]])+1<<"\n";
  36. used[get<3>(v[t.se[i]])] = 1;
  37. used[get<3>(v[t.se[i+1]])] = 1;
  38. }
  39. }
  40. vector<tuple<int,int,int,int> > v1;
  41. for(int i = 0; i < v.size(); i++){
  42. if(used[get<3>(v[i])]==0) v1.pb(v[i]);
  43. }
  44. map< int,vector<int> > m1;
  45. for(int i = 0; i < v1.size(); i++){
  46. if(m1.find(get<0>(v1[i]))==m1.end()){
  47. m1[get<0>(v1[i])] = vector<int>();
  48. }
  49. m1[get<0>(v1[i])].pb(i);
  50. }
  51. for(auto t:m1){
  52. for(int i = 0; i+1 < t.se.size(); i+=2){
  53. cout<<get<3>(v1[t.se[i]])+1<<" "<<get<3>(v1[t.se[i+1]])+1<<"\n";
  54. used[get<3>(v1[t.se[i]])] = 1;
  55. used[get<3>(v1[t.se[i+1]])] = 1;
  56. }
  57. }
  58. vector< tuple<int,int,int,int> > v2;
  59. for(int i = 0; i < v1.size(); i++){
  60. if(used[get<3>(v1[i])]==0){
  61. v2.pb(v1[i]);
  62. }
  63. }
  64. for(int i = 0; i < v2.size(); i+=2){
  65. cout<<get<3>(v2[i])+1<<" "<<get<3>(v2[i+1])+1<<"\n";
  66. }
  67. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement