95 分 RE #13求调
查看原帖
95 分 RE #13求调
668886
fishing_cat楼主2024/10/13 12:12

link

#include<bits/stdc++.h>
#define ll long long

const ll mod = 1e9 + 7;
const ll inf = 1e16;
using namespace std;

void read(ll &x) {
	x = 0;
	char c = getchar();
	ll f = 0;
	for (; !isdigit(c); c = getchar())
		f |= c == '-';
	for (; isdigit(c); c = getchar())
		x = x * 10 + (c ^ '0');
	if (f) x = -x;
}


struct node {
	ll id, vel;
};
ll n;
node g[200100], s[200100], b[200100];
ll ans[200100];
bool cmd(node a, node b) {
	return a.vel > b.vel;
}

int main() {
	read(n);
	for (ll i = 1; i <= n; i++) {
		read(g[i].vel); read(s[i].vel); read(b[i].vel);
		g[i].id = i;
		s[i].id = i;
		b[i].id = i;
		ans[i] = inf;
	}    
	sort(g+1, g+n+1, cmd);
	sort(s+1, s+n+1, cmd);
	sort(b+1, b+n+1, cmd);
	ll kl;
	for (ll i = 1; i <= n; i += kl) {
		kl = 1;
		ans[g[i].id] = min(i, ans[g[i].id]);
		while (1) {
			if (g[i].vel == g[i+kl].vel) {
				ans[g[i+kl].id] = min(i, ans[g[i+kl].id]);
			} else break;
			kl ++;
		}
	}
	for (ll i = 1; i <= n; i += kl) {
		kl = 1;
		ans[s[i].id] = min(i, ans[s[i].id]);
		while (1) {
			if (s[i].vel == s[i+kl].vel) {
				ans[s[i+kl].id] = min(i, ans[s[i+kl].id]);
			} else break;
			kl ++;
		}		
	}
	for (ll i = 1; i <= n; i += kl) {
		kl = 1;
		ans[b[i].id] = min(i, ans[b[i].id]);
		while (1) {
			if (b[i].vel == b[i+kl].vel) {
				ans[b[i+kl].id] = min(i, ans[b[i+kl].id]);
			} else break;
			kl ++;
		}		
	}
	for (int i = 1; i <= n; i++) {
		printf("%lld\n", ans[i]);
	}
    return 0;
}
2024/10/13 12:12
加载中...