清华学堂 LightHouse

灯塔(LightHouse)


Description

As shown in the following figure, If another lighthouse is in gray area, they can beacon each other.

For example, in following figure, (B, R) is a pair of lighthouse which can beacon each other, while (B, G), (R, G) are NOT.

Input

1st line: N

2nd ~ (N + 1)th line: each line is X Y, means a lighthouse is on the point (X, Y).

Output

How many pairs of lighthourses can beacon each other

( For every lighthouses, X coordinates won‘t be the same , Y coordinates won‘t be the same )

Example

Input

3
2 2
4 3
5 1

Output

1

Restrictions

For 90% test cases: 1 <= n <= 3 * 105

For 95% test cases: 1 <= n <= 106

For all test cases: 1 <= n <= 4 * 106

For every lighthouses, X coordinates won‘t be the same , Y coordinates won‘t be the same.

1 <= x, y <= 10^8

Time: 2 sec

Memory: 256 MB

Hints

The range of int is usually [-231, 231 - 1], it may be too small.

视频里有讲解我尽然没看到,醉了。

就是求一下逆序对就行。

 1 #include <cstdlib>
 2 #include <iostream>
 3 #include <cstdio>
 4 #include <cstring>
 5 using namespace std;
 6 #define LL long long
 7 const int max_size = 4 * 1e6;
 8 LL y_val[max_size];
 9 LL tmp_arry[max_size];
10 ///加速代码,why 百度
11 const int SZ = 1<<20;
12 struct fastio{
13     char inbuf[SZ];
14     char outbuf[SZ];
15     fastio(){
16         setvbuf(stdin,inbuf,_IOFBF,SZ);
17         setvbuf(stdout,outbuf,_IOFBF,SZ);
18     }
19 }io;
20 struct Point
21 {
22     LL x, y;
23 } p[max_size];
24
25 int cmp(const void *a, const void *b)
26 {
27     struct Point *c = (Point *)a;
28     struct Point *d = (Point *)b;
29     if(c->x != d->x)
30         return c->x - d->x;
31     else
32         return d->y - c->y;
33 }
34
35 LL Merge(LL *arr, LL beg, LL mid, LL end, LL *tmp_arr)
36 {
37     memcpy(tmp_arr+beg, arr+beg, sizeof(LL)*(end - beg + 1));
38     LL i = beg;
39     LL j = mid+1;
40     LL k = beg;
41     LL inversion = 0;
42     while(i <= mid && j <= end)
43     {
44         if(tmp_arr[i] <= tmp_arr[j])
45             arr[k++] = tmp_arr[i++];
46         else
47         {
48             arr[k++] = tmp_arr[j++];
49             inversion += mid - i + 1;
50         }
51     }
52
53     while(i <= mid)
54         arr[k++] = tmp_arr[i++];
55     while(j <= end)
56         arr[k++] = tmp_arr[j++];
57     return inversion;
58 }
59
60 LL MergeInversion(LL *arr, LL beg, LL end, LL *tmp_arr)
61 {
62     LL inversions = 0;
63     if(beg < end)
64     {
65         LL mid = (beg + end) >> 1;
66         inversions += MergeInversion(arr, beg, mid, tmp_arr);
67         inversions += MergeInversion(arr, mid+1, end, tmp_arr);
68         inversions += Merge(arr, beg, mid, end, tmp_arr);
69     }
70     return inversions;
71 }
72
73 int main()
74 {
75     LL n;
76     cin >> n;
77     for(int i = 0; i < n; i++)
78     {
79         cin >> p[i].x >> p[i].y;
80     }
81
82     qsort(p, n, sizeof(p[0]), cmp);
83     for(int i = 0; i < n; i++)
84     {
85         y_val[i] = p[i].y;
86     }
87
88     memcpy(tmp_arry, y_val, sizeof(LL)*n);
89     cout << n*(n-1) /2 - MergeInversion(y_val, 0, n-1, tmp_arry) << endl;
90     return 0;
91 }

然后再对代码进行优化吧,我的这段过不了最后一个点。因为多做了排序操作,没必要。

时间: 2024-11-03 10:41:29

清华学堂 LightHouse的相关文章

清华学堂 列车调度(Train)

列车调度(Train) Description Figure 1 shows the structure of a station for train dispatching. Figure 1 In this station, A is the entrance for each train and B is the exit. S is the transfer end. All single tracks are one-way, which means that the train ca

清华学堂 Range

Descriptioin Let S be a set of n integral points on the x-axis. For each given interval [a, b], you are asked to count the points lying inside. Input The first line contains two integers: n (size of S) and m (the number of queries). The second line e

【推荐】适合本科生的网络公开课(MOOC为主),不断更新……

题记:身在海大(湛江),是幸运还是不幸,每一个人有自己的定义.人生不能再来一次,唯有把握当下.提高自己,才可能在不能拼爹的年代靠自身实力前行.或许,我们做不了富二代.但我们每一个人.都有机会成为富二代的父母. 抱怨不能改变现状.唯有行动与交流.才可以让我们看到差距,不断前行! MOOC时代,学以致用.全新的时代,没有放弃学习的理由.由用致学.且登且高. 眼下有非常多优秀的网络公开课资源,这里仅介绍部分适合大部分大学生的资源.欢迎大家补充. 常常向同学们推荐网络课程.但因为曾经如Coursera平

清华大学建校105周年

我国高等教育要紧紧围绕实现“两个一百年”奋斗目标.实现中华民族伟大复兴的中国梦, 源源不断培养大批德才兼备的优秀人才.站在新的起点上,清华大学要坚持正确方向.坚持立德树人.坚持服务国家.坚持改革创新,面向世界.勇于进取,树立自 信.保持特色,广育祖国和人民需要的各类人才,深度参与创新驱动发展战略实施,努力在创建世界一流大学方面走在前列,为国家发展.人民幸福.人类文明进步 作出新的更大的贡献. 清华大学的前身是始建于1911年的清华学堂,1912年更名为清华学校,1928年更名为国立清华大学,是我

第一门慕课计划——在广东海洋大学推广MOOC学习

题记:这个计划是参加果壳网的"万有青年养成计划",原帖网址请点击链接.同时希望[3天征集50条建议100个支持],如果您对这个计划感兴趣,请花一分钟(1)点击"第一门慕课计划--在广东海洋大学推广MOOC学习",(2)使用"QQ帐号"登录果壳网,(3)点击"支持"."发表评论"或"分享".你的一小步,成就海大学子一大步.万有青年,需要你的! 如果说自己有一个梦想,那就是成为一个教育家.实

1月10日前未完成《创业创新执行力》考试的补救措施

补救措施方法见海浪BBS(MOOC学习团队汇报贴(<创业创新执行力>课程)) 以下为转载 目前还有XX位同学没有完成考试(即完成相应的调查问卷,见关于尔雅平台通识课<创业创新执行力>的考试方法与考试须知),学习是为了提高,老师根据同学们的诉求,设计了一个补救的办法,未完成考试的同学,可以选择(1)自愿完成补救方法中的学习要求,现在先完成考试:(2)放弃这门课程的学分. 一:补救方法 (1)从如下6个MOOC平台(附1)中,选择一门至少需要学习四周的课程,在5个月内(6月11日前)完

事件绑定和阻止默认事件

5月29,30日 终于到了这一天.晚上有数据结构课,10点多的火车,我们就没有去上课,下午在宿舍里收拾东西,晚上8点左右从南校出发,9点半多到达火车站和老师学长学姐们会和. 第一次去北京,第一次买的卧铺,真的很兴奋.对这次北京之行满满的都是期待.卧铺,躺在上面很舒服,因为第一次,不知道还需要换票,就把票放在包里了,找了一会才找到,看来还是得把票随身带着.卧铺晚上熄灯,我看了一部电影,然后就睡着了,一觉睡到五点多.上午看了看模板,这次蓝桥杯决赛说实话没有怎么认真的准备,做的题也比较少.把一些小的知

记2014“蓝桥杯全国软件大赛&quot;决赛北京之行

5月29,30日 终于到了这一天.晚上有数据结构课,10点多的火车,我们就没有去上课,下午在宿舍里收拾东西,晚上8点左右从南校出发,9点半多到达火车站和老师学长学姐们会和. 第一次去北京,第一次买的卧铺,真的很兴奋.对这次北京之行满满的都是期待.卧铺,躺在上面很舒服,因为第一次,不知道还需要换票,就把票放在包里了,找了一会才找到,看来还是得把票随身带着.卧铺晚上熄灯,我看了一部电影,然后就睡着了,一觉睡到五点多.上午看了看模板,这次蓝桥杯决赛说实话没有怎么认真的准备,做的题也比较少.把一些小的知

中国100年内最好的机会已来临

中国100年内最好的机会已来临 一个崭新的时代即将到来,它可以改变中国任何一个人一生的命运,而中国在100年内都不可能再产生这样的机会! 对于中国人来说,我们赶上了一个最好的时代.当上一轮改革开放的红利释放殆尽,该拿走的都被拿走了.而一个崭新的...点击查看原文 -> http://business.sohu.com/20150522/n413522521.shtml 其实:“+互联网”不是“互联网+” \搜狐财经讯 5月23日到24日,2015清华五道口全球金融论坛“新常态 新金融”在清华大学