HDU4831 - Scenic Popularity(DP或者线段树)
来源:互联网 发布:实名淘宝小号购买 编辑:程序博客网 时间:2024/05/22 12:05
题目链接: HDU4831
【题意】中文题。
【分析】用树状数组 线段树都可以做,但是我这里用了DP思想做,时间复杂度O(n*k),10^7级别,理论上可以过就提交了,然后果然过了。
只要用一个数组p记录每个休息区所对应的风景区,然后每次查询的时候只需要O(N)时间遍历一遍所有点即可;
对于更改操作,这里用到了DP的思想;
先从左往右找出每个休息区左边最近的风景区,用now记录当前最后一个出现的风景区;
在从右往左找出每个休息区右边最近的风景区,然后比较左右两个选择哪个即可。其实就是更新p[],复杂度也是O(N);
【AC CODE】 468ms
#include <cstdio>#include <cstring>#define MAXN 10010int x[MAXN], v[MAXN], p[MAXN], l[MAXN], n;void update(){ int now = -1; for (int i = 0; i < n; i++) { if (!v[i]) l[i] = now; else now = i; } now = -1; for (int i = n - 1; i >= 0; i--) { if (!v[i]) { if (-1 == now && -1 == l[i]) p[i] = -1; else if (-1 == now) p[i] = l[i]; else if (-1 == l[i]) p[i] = now; else if (x[i] - x[l[i]] > x[now] - x[i]) p[i] = now; else if (x[i] - x[l[i]] == x[now] - x[i]) p[i] = v[l[i]] > v[now] ? l[i] : now; else p[i] = l[i]; } else now = i; }}int main(){#ifdef SHY freopen("e:\\1.txt", "r", stdin);#endif int t, count = 0; scanf("%d%*c", &t); while(t--) { int m, a, b; scanf("%d%*c", &n); for(int i = 0; i < n; i++) scanf("%d %d%*c", &x[i], &v[i]); update(); scanf("%d%*c", &m); char ch; printf("Case #%d:\n", ++count); for(int i = 0; i < m; i++) { while((ch = getchar()) != 'U' && 'Q' != ch); if('U' == ch) { scanf("%d %d%*c", &a, &b); v[a] = b; update(); } else { int ans = 0, buf; scanf("%d%*c", &a); for(int j = 0; j < n; j++) { if(!v[j] && ~p[j]) buf = v[p[j]]; else buf = v[j]; if(buf <= a) ans++; } printf("%d\n", ans); } } } return 0;}
0 0
- HDU4831 - Scenic Popularity(DP或者线段树)
- HDU 4831 Scenic Popularity (线段树)
- HDU 4831 Scenic Popularity
- hdu 4831 Scenic Popularity(模拟)
- 【HDU】 4831 Scenic Popularity 暴力模拟
- 【&&】 0525_1001.Scenic Popularity Astar第二战_Failed
- 2014百度之星初赛(第二场)——Scenic Popularity
- 2014百度之星初赛第二轮解题报告:Scenic Popularity
- 2014百度之星初赛第二轮代码注释:Scenic Popularity
- poj 3419 Difference Is Beautiful (dp+二分+RMQ或者dp+离线线段树)
- codeforces #334 D. Babaei and Birthday Cake (线段树或者dp+二分)
- hdu4302 set或者线段树
- ZOJ3381 线段树+DP
- hdu3450(线段树+DP)
- poj2750 线段树+dp
- ZOJ3632 线段树+DP
- 线段树+DP+hdu3016
- hdu4521 线段树+dp
- javase的复习-----5
- Java反射的作用
- Metasploit2: tcp port 139/445 – Samba smbd
- Web开发初探(一) HTML基础
- 【thinkphp3.x】thinkphp3.x中变量的获取和过滤
- HDU4831 - Scenic Popularity(DP或者线段树)
- java枚举使用详解
- n位二进制中1和0的有关问题
- ActionScript3游戏中的图像编程(连载四)
- hdu4870 概率DP
- 命令解释器Sh的编写
- 工厂模式
- Remove Duplicates from Sorted Array
- 每个Mac OS X 命令行用户应当知道的八个终端工具