问题:天空可以理解为一条数轴,在这条数轴上分布着许多颗星星,对于每颗星星都有它的位置Xi和自身的亮度Bi。而窗户所能看到的范围是一个给出的参数W,我们看到的星星也包括窗户边缘的星星。现在,要你求出调整窗户位置后能看到星星的亮度之和最大值。

输入输出格式

输入格式:

一行N,W,分别代表星星的数量和窗户的宽度

余下N行,输入Xi和Bi,代表星星的坐标和亮度

输出格式:

一个数字,代表能看到星星的最大亮度和

输入输出样例

输入样例#1:

6 3
1 2
2 4
3 8
4 4
5 2
1000 1
输出样例#1:

16

说明:

  对于10%的数据,W=0(没有边缘)

  对于40%的数据,W<=1000

  对于100%的数据,N<=100000,W<=100000,Xi<=100000,1<=Bi<=100

  除W=0的情况外,W均为>=3的奇数

  

 在此主要讲线段树做法,若要没接触过的小伙伴建议去了解学习一下:http://www.cnblogs.com/rmy020718/p/8832889.html

思路:
  明显的线段树板子呗,一段区间最亮,那不就是求一段区间和最大嘛。
#include<cstdio>
#include<iostream>
using namespace std;
int a[];
long long n,m,ans,x,y,ch,MAX;
struct ahah{
long long l,r,sum;
}tree[<<];
void build(int k,int l,int r) //建树。
{
tree[k].l=l;tree[k].r=r;
if(tree[k].l==tree[k].r)
{
tree[k].sum=;
return ;
}
long long mid=(tree[k].l+tree[k].r)>>;
build(k<<,l,mid);
build(k<<|,mid+,r);
// tree[k].sum=tree[k<<1].sum+tree[k<<1|1].sum; 开始不需要修改区间和。
}
void update(int k) //此处为单点修改
{
if(tree[k].l==tree[k].r)
{
tree[k].sum+=y;
return ;
}
long long mid=(tree[k].l+tree[k].r)>>;
if(x<=mid)update(k<<);
else update(k<<|);
tree[k].sum=tree[k<<].sum+tree[k<<|].sum;
}
void query(int k) //区间求和。
{
if(x<=tree[k].l&&y>=tree[k].r)
{
ans+=tree[k].sum;
return ;
}
long long mid=(tree[k].l+tree[k].r)>>;
if(x<=mid)query(k<<);
if(y>mid)query(k<<|);
}
int main()
{
scanf("%lld%lld",&n,&m);
build(,,); //感觉在后边建树会比较麻烦,就在此建吧,也慢不了多少。
for(int i=;i<=n;i++)
{
cin>>x>>y;
update(); //每个亮度依靠单点修改来完成。
MAX=max(MAX,x);
}
long long u=;
for(int i=;i<=MAX-m+;i++) //枚举每段合适区间。
{
ans=;
x=i;y=i+m-;
query(); //求取区间和 。
u=max(u,ans); // 记录区间最大和。
}
printf("%lld",u); //输出就好了;
}
此为个人略解,转载请标明出处:http://www.cnblogs.com/rmy020718/p/8832897.html
  本人永久联系QQ:2240560936
  那年你倾尽天下白衣无暇,可曾记得我静月未成一轮春夏,一语落罢,却是了无牵挂。 

luogu P3353 在你窗外闪耀的星星的更多相关文章

  1. 洛谷——P3353 在你窗外闪耀的星星

    P3353 在你窗外闪耀的星星 题目描述 飞逝的的时光不会模糊我对你的记忆.难以相信从我第一次见到你以来已经过去了3年.我仍然还生动地记得,3年前,在美丽的集美中学,从我看到你微笑着走出教室,你将头向 ...

  2. 【洛谷】【线段树】P3353 在你窗外闪耀的星星

    [题目描述:] /* 飞逝的的时光不会模糊我对你的记忆.难以相信从我第一次见到你以来已经过去了3年.我仍然还生动地记得,3年前,在美丽的集美中学,从我看到你微笑着走出教室,你将头向后仰,柔和的晚霞照耀 ...

  3. 洛谷—— P3353 在你窗外闪耀的星星

    https://www.luogu.org/problem/show?pid=3353 题目描述 飞逝的的时光不会模糊我对你的记忆.难以相信从我第一次见到你以来已经过去了3年.我仍然还生动地记得,3年 ...

  4. P3353 在你窗外闪耀的星星

    飞逝的的时光不会模糊我对你的记忆.难以相信从我第一次见到你以来已经过去了3年.我仍然还生动地记得,3年前,在美丽的集美中学,从我看到你微笑着走出教室,你将头向后仰,柔和的晚霞照耀着你玫瑰色的脸颊.我明 ...

  5. 洛谷 P3353 在你窗外闪耀的星星

    题目描述 飞逝的的时光不会模糊我对你的记忆.难以相信从我第一次见到你以来已经过去了3年.我仍然还生动地记得,3年前,在美丽的集美中学,从我看到你微笑着走出教室,你将头向后仰,柔和的晚霞照耀着你玫瑰色的 ...

  6. 洛谷p3353在你窗外闪耀的星星题解

    题目 首先被题目甜到了 本来搜标签搜的线段树,结果发现这题目很吸引我我果断点开 觉得前缀和就能A啊 于是乎 要注意 窗户旁边是可以看到的 所以前缀和的时候是不用再-1的 //前缀和 //注意坑点 // ...

  7. luoguP3353 在你窗外闪耀的星星

    P3353 在你窗外闪耀的星星 题目描述 飞逝的的时光不会模糊我对你的记忆.难以相信从我第一次见到你以来已经过去了3年.我仍然还生动地记得,3年前,在美丽的集美中学,从我看到你微笑着走出教室,你将头向 ...

  8. 洛谷P3353 【在你窗外闪耀的星星】

    题目真的好甜呢QwQ 冲着这题面也要来做 满分解法:线段树 我们暴力地把所有点建成一颗线段数 接着在从1到maxx里每个长度为 w的区间中执行区间求和 其实单点修改都不需要,可以在输入的时候统计出每个 ...

  9. 【题解】在你窗外闪耀的星星-C++

    题目题目描述飞逝的的时光不会模糊我对你的记忆.难以相信从我第一次见到你以来已经过去了3年.我仍然还生动地记得,3年前,在美丽的集美中学,从我看到你微笑着走出教室,你将头向后仰,柔和的晚霞照耀着你玫瑰色 ...

随机推荐

  1. Androidstudio中添加jar包的方法

    在Androidstudio中添加一个jar包进去,怎么添加? 以下纯个人使用Androidstudio过程中的经验积累,要是有不足,望提出建议. 方法一: 先点击Androidstudio中的Pro ...

  2. MongoDb Samus c# Find函数的使用说明

    长活短说, 网上有一些是不对的 比如 Op.GreaterThan(...).LessThan(..) 不能这么用来表示 ( , ) 而应该这么用: var doc = new Document( a ...

  3. python 闭包 闭包与装饰器之间的关系

    一.一个闭包的实际应用例子 def func(a, b): def inner(x): return a * x + b return inner inn = func(1, 1) print(inn ...

  4. 如何为github已有仓库添加协议。

    在github创建开源项目的时候,github会引导开发者添加一个开源协议,直接照着操作即可.但是如果一开始没有添加开源协议,后面要怎么添加呢? 百度无果.多方打听.总结如下步骤. 1.首先,进入你的 ...

  5. HDU6438(贪心技巧)

    第一眼喜闻乐见的股票问题dp可以暴力,然鹅时间不允许. 于是考虑怎么贪. 这篇题解说得很生动了. 因为每支股票都有买入的潜力所以肯定都加在优先队列里. 然后考虑的是哪些需要加入两次.这是我第二次见到类 ...

  6. Jury Meeting CodeForces - 854D

    Jury Meeting CodeForces - 854D 思路:暴力枚举会议开始的那一天(只需用所有向0点飞的航班的那一天+1去枚举即可),并计算所有人此情况下去0点和从0点出来的最小花费. 具体 ...

  7. (好题)树状数组+离散化+DFS序+离线/莫队 HDOJ 4358 Boring counting

    题目传送门 题意:给你一棵树,树上的每个节点都有树值,给m个查询,问以每个点u为根的子树下有多少种权值恰好出现k次. 分析:首先要对权值离散化,然后要将树形转换为线形,配上图:.然后按照右端点从小到大 ...

  8. 1-16使用try-catch捕捉异常

    处理异常 可以使用try-catch-处理异常,例如之前的程序可以使用try-catch-处理 package com.monkey1024.exception; import java.io.Fil ...

  9. Plugging an Unplugged Pluggable Database

    1.unplug To unplug a PDB, you first close it and then generate an XML manifest file. The XML file co ...

  10. Java中“==”的使用,以及“==”和equal的比较

    int i02=59 ,这是一个基本类型,存储在栈中. Integer i03 =Integer.valueOf(59); 因为 IntegerCache 中已经存在此对象,所以,直接返回引用. In ...