fork download
  1. #include <stdio.h>
  2. #include <cstring>
  3. #include <algorithm>
  4.  
  5. using namespace std;
  6.  
  7. const int INF = (int) 1e9 + 100;
  8. const int V = (int)1e5 + 100, E = V;
  9. typedef long long ll;
  10.  
  11. struct star {
  12. int x, y;
  13. };
  14.  
  15. star a[V];
  16.  
  17. int ans[V];
  18.  
  19. bool comp(star a, star b) {
  20. return (a.x < b.x) || ((a.x == b.x) && (a.y < b.y));
  21. }
  22.  
  23. int tree[V], sz = 1;
  24.  
  25. void put(int k) {
  26. tree[k + sz]++;
  27. for(int i = (k + sz) >> 1; i > 0; i /= 2)
  28. tree[i] = tree[2*i] + tree[2*i + 1];
  29. }
  30.  
  31. int get(int l, int r) {
  32. l += sz; r += sz;
  33. int ans = 0;
  34. while(l <= r) {
  35. if(l % 2 == 1)
  36. ans += tree[l];
  37. if(r % 2 == 0)
  38. ans += tree[r];
  39. l = (l + 1) / 2;
  40. r = (r - 1) / 2;
  41. }
  42. return ans;
  43. }
  44.  
  45. void get_prepared() {
  46. sz = 1;
  47. for(int i = 0; i < V; ++i)
  48. tree[i] = 0;
  49. }
  50.  
  51. int main()
  52. {
  53.  
  54. int n;
  55.  
  56. while(scanf("%d", &n) > 0) {
  57.  
  58. while (sz < n) sz *= 2;
  59.  
  60. for (int i = 0; i < n; ++i) {
  61. scanf("%d %d", &a[i].x, &a[i].y);
  62. }
  63.  
  64. sort(a, a + n, comp);
  65. for (int i = 0; i < n; ++i) {
  66. ans[get(0, a[i].y)]++;
  67. put(a[i].y);
  68. }
  69.  
  70. for (int i = 0; i < n; ++i) {
  71. printf("%d\n", ans[i]);
  72. }
  73. }
  74.  
  75. }
  76.  
Success #stdin #stdout 0s 4668KB
stdin
9
0 0
0 1
0 2
1 0
1 1
1 2
2 0
2 1
2 2
9
0 0
0 1
0 2
1 0
1 1
1 2
2 0
2 1
2 2
stdout
1
2
2
1
0
2
0
0
1
1
2
2
2
1
3
0
1
1