Scenic Popularity

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 117    Accepted Submission(s): 25

Problem Description
  临近节日,度度熊们最近计划到室外游玩公园,公园内部包括了很多的旅游景点区和休息区,由于旅游景点很热门,导致景点区和休息区都聚集了很多人。所以度度熊在旅游之前想通过百度地图查看一下公园内各个地方的热门程度。
  假设所有景点区和休息区都是X轴直线上的一系列顶点,所对应的坐标Xi 保证唯一。每个景点区有个初始的热度值,而一个休息区(坐标为Xi)的热度值等于离它距离最近的景点区Xj的热度值(距离定义为|Xi-Xj|),如果此休息区与两个景点区的距离一样,则休息区的热度值选择两个景点区中的热度值最大值,如果两个热度值都一样,则随意选择其中一个。
  度度熊在出门之前会经常去查看百度地图,每次查看前会有某些景点区的热度值已发生改变,从而也会导致周围的休息区的热度值发生改变,然后度度熊想知道当前热度值<=Rk的顶点(包括景点区和休息区)有多少个
 
Input
  输入数据的第一行是测试Case的个数(T<=100)。
  每个Case的第一行是N(0<N<=10000),表示景点区和休息区的总数。
  接着会有N行数据,每一列首先是顶点的X坐标Xi (0< Xi <=1e8),第二列是一个整数Hi(0=<Hi <=100000),如果Hi 不为0,则表示当前顶点为风景区且初始的热度值为Hi,否则表示当前顶点为休息区。这N行数据会按照坐标Xi递增的方式依次给出。
  接着的一行数据是操作的次数K(K<=100),最后会有K行数据,每一行的第一列要么是’U’或者’Q’,’U’表示当前操作为更改热度操作,’Q’表示当前操作为查询操作。如果是更改操作,接着会有两列数据,分别是热度值要改变的风景区的下标Lk(0<=Lk<N)以及改变后的热度值Vk(0< Vk<=100000);如果是查询操作,第二列是要查询的热度范围Rk(0< Rk<=100000)
 
Output
  对于第k组测试数据,第一行输出Case #k:,接下来对每次查询操作(即Q操作)会输出一个整数,表示满足条件的顶点数有多少个
 
Sample Input
1
4
10 0
20 3
30 0
40 2
3
Q 3
U 3 4
Q 3
 
Sample Output
Case #1:
4
2
 
Source
 

我的做法就是在修改的时候,暴力修改和这个点相关的。

找出景点会影响哪些休息区,然后修改的时候暴力,查询的时候树状数组求前n项和

  1. /* ***********************************************
  2. Author :kuangbin
  3. Created Time :2014/5/25 14:22:19
  4. File Name :E:\2014ACM\比赛\百度之星初赛2\A.cpp
  5. ************************************************ */
  6.  
  7. #include <stdio.h>
  8. #include <string.h>
  9. #include <iostream>
  10. #include <algorithm>
  11. #include <vector>
  12. #include <queue>
  13. #include <set>
  14. #include <map>
  15. #include <string>
  16. #include <math.h>
  17. #include <stdlib.h>
  18. #include <time.h>
  19. using namespace std;
  20.  
  21. const int MAXN = ;
  22. long long c[MAXN];
  23. int lowbit(int x)
  24. {
  25. return x&(-x);
  26. }
  27. long long sum(int i)
  28. {
  29. long long ret = ;
  30. while(i > )
  31. {
  32. ret += c[i];
  33. i -= lowbit(i);
  34. }
  35. return ret;
  36. }
  37. void add(int i,long long val)
  38. {
  39. while(i <= )
  40. {
  41. c[i] += val;
  42. i += lowbit(i);
  43. }
  44. }
  45.  
  46. int s1[MAXN];
  47. int s2[MAXN];
  48. int sz1,sz2;
  49.  
  50. vector<int>vec1[];
  51. vector<int>vec2[];
  52. int a[];
  53. int b[];
  54.  
  55. void calc(int u)
  56. {
  57. int id = lower_bound(s1,s1+sz1,s2[u]) - s1;
  58. if(id == )
  59. {
  60. vec1[].push_back(u);
  61. vec2[u].push_back();
  62. }
  63. else if(id == sz1)
  64. {
  65. vec1[sz1-].push_back(u);
  66. vec2[u].push_back(sz1-);
  67. }
  68. else
  69. {
  70. if(s2[u] - s1[id-] < s1[id] - s2[u] )
  71. {
  72. vec1[id-].push_back(u);
  73. vec2[u].push_back(id-);
  74. }
  75. else if(s2[u] - s1[id-] > s1[id] - s2[u])
  76. {
  77. vec1[id].push_back(u);
  78. vec2[u].push_back(id);
  79. }
  80. else
  81. {
  82. vec1[id-].push_back(u);
  83. vec2[u].push_back(id-);
  84. vec1[id].push_back(u);
  85. vec2[u].push_back(id);
  86. }
  87. }
  88. }
  89. int get(int u)
  90. {
  91. if(vec2[u].size() == )
  92. {
  93. return a[vec2[u][]];
  94. }
  95. else
  96. {
  97. return max(a[vec2[u][]],a[vec2[u][]]);
  98. }
  99. }
  100.  
  101. int link[];
  102.  
  103. int main()
  104. {
  105. //freopen("in.txt","r",stdin);
  106. //freopen("out.txt","w",stdout);
  107. int T;
  108. int iCase = ;
  109. int n;
  110. scanf("%d",&T);
  111. while(T--)
  112. {
  113. iCase++;
  114. printf("Case #%d:\n",iCase);
  115. sz1 = ;sz2 = ;
  116. memset(c,,sizeof(c));
  117. int u,v;
  118. scanf("%d",&n);
  119. for(int i = ;i < n;i++)
  120. {
  121. scanf("%d%d",&u,&v);
  122. if(v == )
  123. s2[sz2++] = u;
  124. else
  125. {
  126. s1[sz1++] = u;
  127. link[i] = sz1-;
  128. add(v,);
  129. a[sz1-] = v;
  130. }
  131. vec1[i].clear();
  132. vec2[i].clear();
  133. }
  134. for(int i = ;i < sz2;i++)
  135. calc(i);
  136. for(int i = ;i < sz2;i++)
  137. {
  138. b[i] = get(i);
  139. add(b[i],);
  140. }
  141. char op[];
  142. int m;
  143. scanf("%d",&m);
  144. while(m--)
  145. {
  146. scanf("%s",op);
  147. if(op[] == 'Q')
  148. {
  149. scanf("%d",&u);
  150. printf("%d\n",(int)sum(u));
  151. }
  152. else
  153. {
  154. scanf("%d%d",&u,&v);
  155. u = link[u];
  156. add(a[u],-);
  157. a[u] = v;
  158. add(a[u],);
  159. for(int i = ;i < vec1[u].size();i++)
  160. {
  161. int p = get(vec1[u][i]);
  162. add(b[vec1[u][i]],-);
  163. b[vec1[u][i]] = p;
  164. add(p,);
  165. }
  166. }
  167. }
  168. }
  169. return ;
  170. }

HDU 4831 Scenic Popularity的更多相关文章

  1. hdu 4831 Scenic Popularity(模拟)

    pid=4831" style="font-weight:normal">题目链接:hdu 4831 Scenic Popularity 题目大意:略. 解题思路: ...

  2. HDU 4831 Scenic Popularity (段树)

    Scenic Popularity Problem Description 临近节日,度度熊们近期计划到室外游玩公园.公园内部包含了非常多的旅游景点区和歇息区,因为旅游景点非常热门,导致景点区和歇息区 ...

  3. 2014百度之星初赛第二场hdu 4831 Scenic Popularity

    Scenic Popularity Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  4. hdu4831 Scenic Popularity(线段树)

    题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=4831 题目大概意思就是有多个风景区和休息区,每个风景区有热度,休息区的热度与最接近的分景区的热度相同, ...

  5. hdu 4831

    写了一个小时题目看错了,艹 自己百度吧

  6. 百度之星A

    Scenic Popularity Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  7. ACM 未解决的问题

    还没有搞定的ACM问题列表. google code jam Round1A Round1B Round1C Round2 Round3 Onsite Finals 百度之星 一.资格赛题目: dis ...

  8. (KMP 水)Wow! Such Doge! -- hdu -- 4847

    http://acm.hdu.edu.cn/showproblem.php?pid=4847 Wow! Such Doge! Time Limit:1000MS     Memory Limit:32 ...

  9. HDOJ 2111. Saving HDU 贪心 结构体排序

    Saving HDU Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

随机推荐

  1. javascript实现原生ajax的方法

    <script> var xmlHttp; function createxmlHttpRequest() { if (window.ActiveXObject) { xmlHttp = ...

  2. sqlserver2000 在查询时产生序号列的办法

    用的是数据库sqlserver2000,唉,有点老了,好处是到处都有,安装方便. select ( select count(*) from temp_gzsphzb as t1 where spid ...

  3. Hive On Spark hiveserver2方式使用

    启动hiveserver2: hiveserver2 --hiveconf hive.execution.engine=spark spark.master=yarn 使用beeline连接hives ...

  4. UEFI+GPT引导实践篇(一):切换到UEFI启动,准备安装介质

    如果只单纯比较UEFI引导和BIOS引导,那么毫无疑问UEFI引导要简单很多.不过现在的主板大都是同时兼容BIOS和UEFI引导方式,所以在实际操作前还需要确认一些东西.详见下文. 1.我的电脑支不支 ...

  5. C#泛型代理、泛型接口、泛型类型、泛型方法

    //http://www.cnblogs.com/JeffreySun/archive/2012/11/14/2770211.html //http://www.baqima.com/a/2628.h ...

  6. .NET牛人应该知道些什么

    任何一个使用.NET的人 1.描述线程与进程的区别? 线程(Thread)与进程(Process)二者都定义了某种边界,不同的是进程定义的是应用程序与应用程序之间的边界,不同的进程之间不能共享代 码和 ...

  7. django--模板(七)

    1.模板加载 一个项目可以有多个应用,每个应用下都可以有模板,思考模板的查找顺序?

  8. 把解压缩版的tomcat6注册成服务并设置自启动

    操作步骤: 1.在“开始 ”→“运行 ”中输入cmd 命令,进入MS-DOS界面 2.cd 到tomcat的bin目录下       C:/> cd tomcat/bin 3.运行命令servi ...

  9. Android test---SL4A

    这里有一个链接http://www.linuxidc.com/Linux/2014-02/96452.htm 详细教程

  10. leetcode 217

    217. Contains Duplicate Given an array of integers, find if the array contains any duplicates. Your ...