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. npm 错误记录

    npm run dev iview-weapp@1.1.0 dev /Users/Jovins/Desktop/小程序/iview-weapp gulp --gulpfile build/build- ...

  2. tensorflow 分布式搭建

    https://blog.csdn.net/qq_40652148/article/details/80467131 https://yq.aliyun.com/articles/602111 git ...

  3. 用U盘完成win10系统的安装

    电脑太卡了,每次都要重装,然后每次忘记要从哪里开始动手,都要百度,仅以此篇记录下 目录 1.系统盘准备 2.从U盘启动安装 1.系统盘准备 第一步:在电脑中完成系统盘制作工具的安装,由于它是要依赖.n ...

  4. django项目部署过程

    django项目部署过程 1.上传代码 用git或者其他工具,如scp 代码上传后保证每个应用下的migrations文件夹里只有一个__init__.py文件,自己的迁移文件不要上传上来,具体的gi ...

  5. HTML学习之==>JS

    HTML中的三把利器的JS 又称为JavaScript,看着好像和Java有点联系,实际上他和java半毛钱关系都没有,JavaScript和我们学习的Python.Go.Java.C++等,都是一种 ...

  6. Python学习之==>操作MySQL

    一.简介: MySQL为关系型数据库,其他关系型数据库包括Oracle.DB2.Sql Server等等.Python操作MySQL需要使用到pymsyql模块,pip安装即可. 二.操作MySQL步 ...

  7. Delphi回车键切换焦点

    unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms ...

  8. 12 oracle 数据库坏块--物理坏块-ORA-01578/ORA-01110

    oracle 数据库坏块--物理坏块 数据坏块的类型物理坏块:通常是由于硬件损坏如磁盘异常导致.内存有问题.存储链有问题. IO有问题.文件系统有问题. Oracle本身的问题等逻辑坏块:可能都是软件 ...

  9. linux python 修改环境变量 添加自定义模块路径

    举一个很简单的例子,如果你发现一个包或者模块,明明是有的,但是会发生这样的错误: >>> from algorithm import *Traceback (most recent ...

  10. python-应用OpenCV和Python进行SIFT算法的实现

    如下图为进行测试的q和h,分别验证基于BFmatcher.FlannBasedMatcher等的SIFT算法 代码如下: import numpy as np import cv2 from matp ...