1. 程式人生 > >Codeforces Round #470-C-Producing Snow(二分)

Codeforces Round #470-C-Producing Snow(二分)


題意:給你n堆雪,每堆有ai單位,第i堆從第i天開始融化,並從此往後每天能融化bi單位(當然,若總量在改天小於bi,呢就是融化剩下的單位量),然後問你每天融化的雪的總量。

題解:對於每天最多能融化的雪量求一波字首和,然後對於每一堆雪量二分查詢在那天能融化完,然後用類似區間覆蓋的思想標記每天會融化多少倍的bi即可,還有就是若之前某一堆的雪量小於bi,則直接加到該天的答案裡即可。

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
#define maxn 100005
#define ll long long
ll sum[maxn],a[maxn],b[maxn],sm[maxn],ans[maxn],n;
int main(void)
{
	scanf("%lld",&n);
	for(int i=1;i<=n;i++)
		scanf("%lld",&a[i]);
	for(int i=1;i<=n;i++)
	{
		scanf("%lld",&b[i]);
		sum[i]=sum[i-1]+b[i];
	}
	for(int i=1;i<=n;i++)
	{
		ll l=i,r=n,mid,p=i-1;
		while(l<=r)
		{
			mid=(l+r)/2;
			if(sum[mid]-sum[i-1]>a[i])
				r=mid-1;
			else
				p=mid,l=mid+1;
		}
		if(p<i) 
			ans[i]+=a[i];
		else 
		{
			sm[i]++,sm[p+1]--;
			ans[p+1]+=a[i]-(sum[p]-sum[i-1]);  
		}
	}    
	for(int i=1;i<=n;i++)
		sm[i]+=sm[i-1];
	for(int i=1;i<=n;i++)
	{
		ans[i]+=sm[i]*b[i];
		printf("%lld ",ans[i]);
	}
	printf("\n");
	return 0;
}


相關推薦

Codeforces Round #470-C-Producing Snow二分

題意:給你n堆雪,每堆有ai單位,第i堆從第i天開始融化,並從此往後每天能融化bi單位(當然,若總量在改天小於bi,呢就是融化剩下的單位量),然後問你每天融化的雪的總量。 題解:對於每天最多能融化的

Codeforces Round #522 C. Playing Pianodp

Little Paul wants to learn how to play piano. He already has a melody he wants to start with. For simplicity he represented this melody as a sequence&

Codeforces Round #470 (rated, Div. 2, based on VK Cup 2018 Round 1)C. Producing Snow

C. Producing Snow Alice likes snow a lot! Unfortunately, this year’s winter is already over, and she can’t expect to have any

Codeforces Round #513 C - Maximum Subrectangle 數學+思維

int each bit bar box nbsp 可以轉化 ces arrays 已知一個長度為n的數組a和一個長度為m的數組b,問當兩者相乘組成矩陣時求滿足子矩陣中所有數相加小於x的最大面積 數學題,這個問題可以轉化為從A和B中找到一個子陣列,使得這些子陣列的元素總和的

Educational Codeforces Round 53 C Vasya and Robot (二分)

題意 有一個機器人,有四種指令,上下左右,最初機器人在 ( 0 ,

2018.12.05 codeforces 948C. Producing Snow

傳送門 維護一個堆。 每次先算出一個都不彈掉的總貢獻。 然後把要彈掉的彈掉,並減去它們對應的貢獻。 程式碼: #include<bits/stdc++.h> #define ri register int using namespace std; typedef long

codeforces #262 DIV2 C題Present二分+貪心

這個題是用二分列舉最小值,然後判斷能否在規定的次數內使得所有的數都達到這個值。判斷的時候要用貪心的方法判斷,從左往右遍歷,這時候需要讓每次澆花的範圍儘量向右。所以當到達一個不得不澆花的地方時,要繼續

Codeforces Round #470-D-Perfect Security01字典樹

題意:給你兩個陣列,對於每個ai,在b陣列中找到一個元素與其異或,得到的值為ci,同時刪除bi,然後讓你輸出組成字典序最小c陣列 題解:裸的01字典樹,對於每個ai,找能和ai異或出最小值的bi即可

Codeforces 470Div 2 C. Producing Snow

Alice likes snow a lot! Unfortunately, this year's winter is already over, and she can't expect to have any more of it. Bob has thus bought her a gift — a

Educational Codeforces Round 64 C. Match Points 【二分思想】

urn 就是 mat main turn 個數 分數 ali -s 一 題面   C. Match Points 二 分析   根據題意很容易想到要去找滿足條件的數,因為可以打亂輸入的順序,所以很容易想到二分。   但是如果直接對輸入的數組進行二分,如輸入$a$,直

CodeForces 884A.B.C Book Reading | Japanese Crosswords Strike Back | Bertown SubwayDFS

有序 req air 改變 rain ont ring cal word Recently Luba bought a very interesting book. She knows that it will take t seconds to read the book

Codeforces Round #513 D - Social Circles貪心

std typedef ORC using codeforce names nbsp 代碼 code 題目大意:有n(n≤105)個人排成一圈,第i個人要求自己左邊空出li個座位,右邊空出ri(li,ri≤109)個座位。問最少需要安排多少個座位。思路:一開始先假設每

Codeforces Round #515 (Div. 3) B模擬

題意:在數列中值為1的位置有1個加熱器,它能覆蓋它的左邊第 r-1 位置到它的右邊 r-1 的位置,問最少多少個加熱器能覆蓋整個區間。 思路:模擬這個過程,首先now=1,然後遍歷所有位置,找到最遠的滿足now這個位置能加熱的點,再另now=i+r-1+1,之所以要+1,是因為,i+r-1這個位

Codeforces Round #515 (Div. 3) A思維

題意:找1~L之間 v 的倍數的個數,在區間[l,r]之間的不能算 思路:1到n之間v的倍數個數為n/v向下取整,因為是閉區間,所以區間裡v的倍數個數為r/v-(l-1)/v,l為什麼要減一?因為l-1/v是1到l-1中v的倍數個數。 #include<bits/stdc++.h>

Codeforces Round #515 (Div. 3) D模擬

題意:有m個箱子,每個箱子容量為k,問你最多能裝多少個物品,你只能依次捨棄前面的,後面的必須全部裝完。 思路:題目意思是裝過東西的箱子如果你又拿了一個箱子,那麼以前的箱子就裝不了了,即使還能裝。所以倒著遍歷物品,模擬一下就行了。 #include<bits/stdc++.h> u

Codeforces 689C. Mike and Chocolate Thieves二分

題目連結:http://codeforces.com/contest/689/problem/C 題意:說實話,這個題的意思我愣了看了十多遍沒看懂,最後還是看的別人的題解明白的。        意思就是:有4個賊,他們共用一個容量為n的揹包,他們偷的東

CodeForces 251 A.Points on Line二分

Description 給出數軸上n個點的座標,問有多少種方案可以從中選取三個點使得其中距離最遠點對距離不超過d Input 第一行兩個整數n,d,之後升序的輸入n個點的座標ai(1≤n≤105,

【打CF,學演算法——三星級】CodeForces 689C Mike and Chocolate Thieves 二分

Note In the first sample case the smallest n that leads to exactly one way of stealing chocolates isn = 8, whereas the amounts of stealed chocolates are(1

Codeforces Round #501 (Div. 3) A暴力

A. Points in Segments time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output

Codeforces Round #501 (Div. 3) D暴力

D. Walking Between Houses time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard o