Sujeto al efecto
FIG astrónomos estudian a menudo estrella, la estrella en el dibujo, la estrella está representada por un punto en el plano, tenemos coordenadas cartesianas de cada estrella. Hacer una fila de estrella es el número de estrellas en la esquina inferior izquierda de su exhaustiva.
vínculo del título original
análisis de las ideas
En primer lugar, pensar en la búsqueda violenta Sí estaba tan débil , no trate de cómo vivir?
#include<iostream>
#include<iomanip>
#include<string.h>
#include<vector>
#include<algorithm>
#include<cmath>
using namespace std;
#define ll int
#define MAX 15005
struct star {
ll x, y;
star(ll a = 0, ll b = 0) { x = a, y = b; }
}s[MAX];
ll cnt[MAX];
ll res[MAX];
int main() {
ll n; cin >> n;
memset(cnt, 0, sizeof(cnt));
memset(res, 0, sizeof(res));
for (int i = 0; i < n; i++)scanf_s("%d%d", &s[i].x, &s[i].y);
for (int i = 1; i < n; i++) {
for (int j = i - 1; j >= 0; j--) {
if (s[i].x >= s[j].x&&s[i].y >= s[j].y)
cnt[i]++;
}
}
for (int i = 0; i < n; i++) {
res[cnt[i]]++;
}
for (int i = 0; i < n; i++)cout << res[i] << endl;
}
Expectativas TLE, pensar acerca de cómo optimizar, observar la entrada, la entrada se clasifica, por las mismas estrellas coordinarlos para cada uno adicional en sus abscisas derecha estrellas del mismo nivel será 1. Cómo determinar los cambios que se ordenada? Ruoguo una entrada de corriente
coordenadas no son los mismos que en una coordenada y, a continuación, lo que tenemos que hacer al respecto? Tenemos que encontrar
línea, la ordenada inferior o igual
número de todos los puntos, más el número del banco ha sido introducida en el punto. Si mantenemos una matriz
sistema representa la coordenada y antes de la actual y la abscisa es igual ai
la cantidad de puntos, considere la forma de actualización, podría ir de nuevo la muestra
5
1 1
5 1
7 1
3 3
5 5
a[1] a[2] a[3] a[4] a[5] a[6] a[7]
第一行:
(1,1) 1 0 0 0 0 0 0
(5,1) 0 0 0 0 1 0 0
(7,1) 0 0 0 0 1 0 1
第二行:
(3,3) 1 0 1 0 1 0 1
第三行:
(5,5) 1 0 1 0 2 0 1
Para (5,1), tenemos que encontrar antes de una [5] y todos los elementos, por la segunda línea (3,3), aún tenemos que encontrar todos los elementos antes de una [3] la suma, que es: consulta intervalo. Si el mismo intervalo, prefijos, y puede manejar todo array aparente, pero cada punto de entrada, necesitamos la coordenada x que corresponde a la posición de una [x] + = 1: Árbol de la actualización de un único punto, la matriz puede venir práctico
#include<iostream>
#include<string.h>
#include<string>
#include<iomanip>
#include<algorithm>
#include<vector>
using namespace std;
#define ll int
#define MAX 32005
ll N, a[MAX], level[MAX];
void add(ll pos, ll val) {
for (ll i = pos; i < MAX; i += i & (-i)) {
a[i] += val;
}
}
ll sum(ll t) {
ll res = 0;
for (ll i = t; i > 0; i -= i & (-i))
{
res += a[i];
}
return res;
}
int main() {
scanf_s("%d", &N);
for (ll i = 0; i < N; i++) {
ll s = 0, t = 0;
scanf_s("%d%d",&s, &t);
level[sum(s + 1)]++;//树状数组是从1开始的,坐标从0开始,统一加1;
add(s + 1, 1);
}
for (ll i = 0; i < N; i++)cout << level[i] << endl;
}