C2. Balanced Removals (Harder)

mac2026-09-02  7

http://codeforces.com/contest/1237/problem/C2

#include <bits/stdc++.h> //#include <cmath> //#include <iostream> //#include <unordered_map> #define lowbit(x) ((x)&(-x)) #define mem(x,y) memset(x,y,sizeof(x)) #define pb push_back #define INF 0x3f3f3f3f #define ll long long #define FAST_IO ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); using namespace std; const int mod=1e9+7; const int N=1e5+9; struct node { int id; int x,y,z; }p[N]; bool vis[N]; bool cmp(node a,node b) { if(a.x==b.x) { if(a.y==b.y) return a.z<b.z; return a.y<b.y; } return a.x<b.x; } int main() { FAST_IO; int n; cin>>n; for(int i=1;i<=n;i++) { p[i].id=i; cin>>p[i].x>>p[i].y>>p[i].z; } sort(p+1,p+1+n,cmp); int l=1; for(int i=2;i<=n;i++) { if(l&&p[i].x==p[l].x&&p[i].y==p[l].y) { vis[i]=vis[l]=1; cout<<p[i].id<<" "<<p[l].id<<endl; l=0; } else l=i; } l=1; while(vis[l]) l++; for(int i=l+1;i<=n;i++) { if(vis[i]) continue; if(l&&p[i].x==p[l].x) { vis[i]=vis[l]=1; cout<<p[i].id<<" "<<p[l].id<<endl; l=0; } else l=i; } l=1; while(vis[l]) l++; for(int i=l+1;i<=n;i++) { if(vis[i]) continue; if(l) { cout<<p[i].id<<" "<<p[l].id<<endl; vis[i]=vis[l]=1; l=0; } else l=i; } return 0; }

 

最新回复(0)