Scenic Popularity

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

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
 
解题:
直接暴力,不过要注意初始化!!!!

#include<stdio.h>
#include<algorithm>
using namespace std; struct node
{
int pos;
int val;
int mark;
int ll,rr;
}a[21000];
struct no
{
int id;
int val;
int dis;
}f[21000];
int main()
{
int i,j;
int T,ca=0;
scanf("%d",&T);
while(T--)
{
ca++;
int n;
scanf("%d",&n);
int cnt=0;
for(i=1;i<=n;i++)
{
scanf("%d%d",&a[i].pos,&a[i].val);
if(a[i].val)
{
a[i].mark=0;//景点
f[++cnt].id=i;
f[cnt].dis=a[i].pos;
f[cnt].val=a[i].val;
}
else
a[i].mark=1;//休息区;
}
f[0].id=0;
f[0].dis=-1000000000;
f[0].val=0;
f[cnt+1].id=n+1;
f[cnt+1].dis=1000000000;
f[cnt+1].val=0;
a[0].pos=-1000000000;
a[0].val=0;
a[n+1].pos=1000000000;
a[n+1].val=0;
int now=0;
for(i=1;i<=n;i++)
{
if(a[i].mark)
{
int l,r;
l=a[i].pos-f[now].dis;
r=f[now+1].dis-a[i].pos;
a[i].ll=f[now].id;
a[i].rr=f[now+1].id;
if(l-r<0)
a[i].val=f[now].val;
else if(l-r>0)
a[i].val=f[now+1].val;
else
a[i].val=max(f[now+1].val,f[now].val);
}
else
{
now++;
a[i].ll=a[i].rr=i;
}
//printf("%d %d %d",i,a[i].ll,a[i].rr);printf("\n");
}
int k;
scanf("%d",&k);
printf("Case #%d:\n",ca);
while(k--)
{
//for(i=1;i<=n;i++)printf("%d ",a[i].val);printf("\n");
char s[2];
scanf("%s",s);
int x,y;
if(s[0]=='Q')
{
scanf("%d",&x);
int ans=0;
for(i=1;i<=n;i++)
if(a[i].val<=x)
ans++;
printf("%d\n",ans);
}
else
{
scanf("%d%d",&x,&y);
x++;
a[x].val=y;
for(i=x-1;i>0;i--)
{
if(!a[i].mark)
break;
int l,r;
l=a[i].pos-a[a[i].ll].pos;
r=a[a[i].rr].pos-a[i].pos;
if(l-r<0)
break;
else if(l-r>0)
a[i].val=a[x].val;
else
a[i].val=max(a[a[i].ll].val,a[a[i].rr].val);
}
for(i=x+1;i<=n;i++)
{
if(!a[i].mark)
break;
int l,r;
l=a[i].pos-a[a[i].ll].pos;
r=a[a[i].rr].pos-a[i].pos;
if(l-r>0)
break;
else if(l-r<0)
a[i].val=a[x].val;
else
a[i].val=max(a[a[i].ll].val,a[a[i].rr].val);
}
}
}
}
return 0;
}

2014百度之星初赛第二场hdu 4831 Scenic Popularity的更多相关文章

  1. 2014百度之星预赛(第二场)——Best Financing

    2014百度之星预赛(第二场)--Best Financing Problem Description 小A想通过合理投资银行理財产品达到收益最大化.已知小A在未来一段时间中的收入情况,描写叙述为两个 ...

  2. hdu 4831 Scenic Popularity(模拟)

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

  3. HDU 4831 Scenic Popularity

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

  4. HDU 4831 Scenic Popularity (段树)

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

  5. HDU 5690:2016"百度之星" - 初赛 All X

    原文链接:https://www.dreamwings.cn/hdu5690/2657.html All X Time Limit: 2000/1000 MS (Java/Others)    Mem ...

  6. 2016"百度之星" - 初赛(Astar Round2A)HDU 5695 拓扑排序+优先队列

    Gym Class Time Limit: 6000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total S ...

  7. 2016百度之星 初赛2A ABEF

    只做了1001 1002 1005 1006.剩下2题可能以后补? http://acm.hdu.edu.cn/search.php?field=problem&key=2016%22%B0% ...

  8. 2018 计算之道初赛第二场 阿里巴巴的手机代理商(困难)(反向可持久化Trie)

    阿里巴巴的手机代理商(困难) 阿里巴巴的手机代理商正在研究 infra 输入法的新功能.他们需要分析单词频率以改进用户输入法的体验.于是需要你在系统内核里面写一个 API. API 有如下功能: 添加 ...

  9. 【百度之星初赛A】路径交 LCA+线段树

    [百度之星初赛A]路径交 Problem Description 给定一棵n个点的树,以及m条路径,每次询问第L条到第R条路径的交集部分的长度(如果一条边同时出现在2条路径上,那么它属于路径的交集). ...

随机推荐

  1. IView入门练习~CDN模式全局加载JS

    关于 iView iView 是一套基于 Vue.js 的开源 UI 组件库,主要服务于 PC 界面的中后台产品. 特性 高质量.功能丰富 友好的 API ,自由灵活地使用空间 细致.漂亮的 UI 事 ...

  2. mysql根据身份证查询年龄,地址,性别

    elect  case left(idcard,2)  when '11' then '北京市' when '12' then '天津市' when '13' then '河北省' when '14' ...

  3. RCU原理分析

    简介 RCU(Read-Copy Update)是数据同步的一种方式,在当前的Linux内核中发挥着重要的作用.RCU主要针对的数据对象是链表,目的是提高遍历读取数据的效率,为了达到目的使用RCU机制 ...

  4. python-又来练习题--输出一个字符串中最长的子字符串及其长度

    一.有个字符串 str= '$sd1#111$svda123!!!221&eSSDSyyyyyyDG^svda121^svda124^1111111111111' 包含特殊字符.数字和字母,输 ...

  5. TCP/IP 网络模型

    前言 互联网是怎么构成的,又是怎么运作的?什么是 TCP/IP 网络?为什么远隔万里的计算机可以互相通信?计算机网络作为 IT 行业的基石,是工程师永远绕不开的话题. 计算机网络的分层体系结构 计算机 ...

  6. 在性能测试时使用nmon进行监控服务器性能

    在使用Jmeter进行性能测试,可以使用nmon进行服务器的监控. 一.nmon说明 nmon分为工具包和分析包(nmonanalyser) nmon安装很简单,根据服务器版本,下载相应的版本后,进行 ...

  7. python检测进程是否存在

    import win32com.client def check_exsit(process_name): WMI = win32com.client.GetObject('winmgmts:') p ...

  8. 用configmap管理配置

    一.ConfigMap介绍管理配置: ConfigMap介绍 Secret 可以为 Pod 提供密码.Token.私钥等敏感数据:对于一些非敏感数据,比如应用的配置信息,则可以用 ConfigMap ...

  9. 编写shell脚本一键启动 重启 停止springboot项目

    #!/bin/bash #设置环境变量 export JAVA_HOME=/usr/local/jdk1.8.0_181 export JRE_HOME=/$JAVA_HOME/jre export ...

  10. redis4支持内存碎片清理功能使用

    最近看到redis4支持内存碎片清理了, 之前一直期待有这么一个功能, 因为之前遇到内存碎片的解决办法就是重启, 现在终于有了优雅的解决方案.\^o^/, 这个功能其实oranagra 在2017年1 ...