问题:天空可以理解为一条数轴,在这条数轴上分布着许多颗星星,对于每颗星星都有它的位置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. 洛谷 - P2045 - 方格取数加强版 - 费用流

    原来这种题的解法是费用流. 从一个方格的左上走到右下,最多走k次,每个数最多拿走一次. 每次走动的流量设为1,起始点拆点成限制流量k. 每个点拆成两条路,一条路限制流量1,费用为价值相反数.另一条路无 ...

  2. 《对“XXX::Invoke”类型的已垃圾回收委托进行了回调。这可能会导致应用程序崩溃、损坏和数据丢失。向非托管代码传递委托时,托管应用程序必须让这些委托保持活动状态,直到确信不会再次调用它们》的问题的解决方法

    <对“XXX::Invoke”类型的已垃圾回收委托进行了回调.这可能会导致应用程序崩溃.损坏和数据丢失.向非托管代码传递委托时,托管应用程序必须让这些委托保持活动状态,直到确信不会再次调用它们& ...

  3. AForge.NET .NET2.0程序集无法在.net 4.0 中运行的解决方案

    如有雷同,不胜荣欣,若转载,请注明 最近在项目上一直使用.net4.0 framework,突然发现一个AForge.net中使用ffmepeg下的一个dll时,提示只能在2.0下运行,在众多MSDN ...

  4. EditPlus 3:设置自动换行

    打开软件,菜单栏点击Document,再在下拉栏中点击Permanent Settings,然后在弹出的设置框中找到Word Wrap点击,最后在弹出的小框中勾选第一个Enable word wrap ...

  5. 喵哈哈村的魔法考试 Round #1 (Div.2) ABCD

    官方题解: http://www.cnblogs.com/qscqesze/p/6418555.html#3623453 喵哈哈村的魔法石 描述 传说喵哈哈村有三种神奇的魔法石:第一种魔法石叫做人铁石 ...

  6. Codeforces Round #408 (Div. 2) D

    Description Inzane finally found Zane with a lot of money to spare, so they together decided to esta ...

  7. BFS 2015百度之星初赛2 HDOJ 5254 棋盘占领

    题目传送门 /* BFS:先把1的入队,每个1和它相邻的组合后看看能不能使0变1,若有则添加入队,change函数返回改变了多少个0 注意:结果还要加上原来占领的 */ #include <cs ...

  8. JavaScript-获取当前元素的相关元素或节点--方法总结

    1.获取当前元素中的第一个子节点 document.getElementById("uu").firstChild 2.获取当前元素中的第一个子元素 document.getEle ...

  9. python关于文件的一些记录

    1.文件打开: file("data.txt")或open("data.txt")注意不要漏了文件的后缀.(不加参数时,file为你默认为'r',reading ...

  10. HAL之EXIT

    在STM32cubeMX中 1 在GPIO管脚上选定EXIT功能 2 在GPIO模式中设定触发边沿类型 3 在NVIC中设定NVIC分组及使能EIXT_Line0_interrupt 在MDK中的GP ...