读书人

一道ACM题,该如何解决

发布时间: 2012-05-07 12:40:40 作者: rapoo

一道ACM题


请问这题有什么好的算法??

线段树??怎么在次插入时查询每个点是否已经被访问??
1053: 拍照
http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1053
Description
青蛙妈妈的蝌蚪宝宝们长大了。为了纪念,妈妈决定给小蝌蚪们拍照留念,于是让小蝌蚪们排成一排,但是青蛙妈妈的宝宝实在是太多了太多了,她每次只能给其中的一部分小蝌蚪拍照,于是青蛙妈妈给排成一排的小蝌蚪拍了很多很多的照片。但青蛙妈妈要知道在每次拍照后的最新那张照片上有多少小蝌蚪在之前已经被拍照过,以便为下一次拍照做安排,但相片越来越多,青蛙妈妈的记忆不好,于是想请在坐的正在看此题的各位大神们帮她写个Program来解决这个难题。
Input
多组测试实例,每组测试实例间用空行隔开
输入第一行为N(0<N<=100000)小蝌蚪的个数,M(0<M<=10000)拍相片的总数。
接下来的 M 行包含两个整数 a,b(a <= b),表示青蛙妈妈每次拍照的相片中最左与最右小蝌蚪在队列中的位置。如:1,3表示这一张相片上拍到的小蝌蚪是编号为1~3共3个小蝌蚪。小蝌蚪在队列中的位置编号为1~N
Output
对每张相片,输出在这相片上,有多少小蝌蚪在之前已经被拍照过。每组数据以一个空行结尾。
Sample Input
10 4
1 2
6 9
2 5
4 10

10 3
5 9
3 5
1 2
Sample Output
0
0
1
6

0
1
0

[解决办法]
最蠢的方法是设置一个标记数组,每次对比数组里的标记,更新数组里的标记..
[解决办法]
就是楼主所说的 线段树

读书人网 >C++

热点推荐