luogu P3353 在你窗外閃耀的星星

2022-04-28 18:30:10 字數 1728 閱讀 3998

問題:天空可以理解為一條數軸,在這條數軸上分布著許多顆星星,對於每顆星星都有它的位置xi和自身的亮度bi。而窗戶所能看到的範圍是乙個給出的引數w,我們看到的星星也包括窗戶邊緣的星星。現在,要你求出調整窗戶位置後能看到星星的亮度之和最大值。

輸入格式:

一行n,w,分別代表星星的數量和窗戶的寬度

餘下n行,輸入xi和bi,代表星星的座標和亮度

輸出格式:

乙個數字,代表能看到星星的最大亮度和

輸入樣例#1:

6 3

1 22 4

3 84 4

5 21000 1

輸出樣例#1: 

16

說明:

對於10%的資料,w=0(沒有邊緣)

對於40%的資料,w<=1000

對於100%的資料,n<=100000,w<=100000,xi<=100000,1<=bi<=100

除w=0的情況外,w均為》=3的奇數

在此主要講線段樹做法,若要沒接觸過的小夥伴建議去了解學習一下:

思路:

明顯的線段樹板子唄,一段區間最亮,那不就是求一段區間和最大嘛。

#include#include

using

namespace

std;

int a[100001

];long

long

n,m,ans,x,y,ch,max;

struct

ahahtree[

100001

<<2

];void build(int k,int l,int r) //

建樹。

long

long mid=(tree[k].l+tree[k].r)>>1

; build(k

<<1

,l,mid);

build(k

<<1|1,mid+1

,r);

//tree[k].sum=tree[k<<1].sum+tree[k<<1|1].sum; 開始不需要修改區間和。

}void update(int k) //

此處為單點修改

long

long mid=(tree[k].l+tree[k].r)>>1

;

if(x<=mid)update(k<<1

);

else update(k<<1|1

); tree[k].sum=tree[k<<1].sum+tree[k<<1|1

].sum;

}void query(int k) //

區間求和。

long

long mid=(tree[k].l+tree[k].r)>>1

;

if(x<=mid)query(k<<1

);

if(y>mid)query(k<<1|1);}

intmain()

long

long u=0

;

for(int i=1;i<=max-m+1;i++) //

列舉每段合適區間。

printf(

"%lld

",u); //

輸出就好了;

}

Luogu P3353 在你窗外閃耀的星星

題目 飛逝的的時光不會模糊我對你的記憶。難以相信從我第一次見到你以來已經過去了3年。我仍然還生動地記得,3年前,在美麗的集美中學,從我看到你微笑著走出教室,你將頭向後仰,柔和的晚霞照耀著你玫瑰色的臉頰。我明白,我已經沉醉於你了。之後,經過幾個月的觀察和窺探,你的優雅與智慧型,你對待生活的態度和你對未...

洛谷 3353 在你窗外閃耀的星星

傳送門 題目描述 飛逝的的時光不會模糊我對你的記憶。難以相信從我第一次見到你以來已經過去了 3 33 年。我仍然還生動地記得,3 33 年前,在美麗的集美中學,從我看到你微笑著走出教室,你將頭向後仰,柔和的晚霞照耀著你玫瑰色的臉頰。我明白,我已經沉醉於你了。之後,經過幾個月的觀察和窺探,你的優雅與智...

P3353 在你窗外閃耀的星星

飛逝的的時光不會模糊我對你的記憶。難以相信從我第一次見到你以來已經過去了3年。我仍然還生動地記得,3年前,在美麗的集美中學,從我看到你微笑著走出教室,你將頭向後仰,柔和的晚霞照耀著你玫瑰色的臉頰。我明白,我已經沉醉於你了。之後,經過幾個月的觀察和窺探,你的優雅與智慧型,你對待生活的態度和你對未來的願...