Can anyone help me in solving this problem ?

                                                           **SALES**


Bosco has gotten his hands on B (1 \leq B \leq 50) dollars! Being a Magic the Gathering™ enthusiast, he wishes to spend some amount of his budget on cards to improve his deck.

He has located a local store that has N (1 \leq N \leq 30,000) cards for sale. Card i costs c_i (1 \leq c_i \leq 50) dollars, and will improve Bosco’s DQI (Deck Quality Index) by v_i (1 \leq v_i \leq 1000) points. Only one copy of each card is for sale.

Business hasn’t been too great lately, so the store is offering sales on various days. Though the term “price adjustments” would be more accurate, as card prices can increase, “sales” are much more appealing – and, indeed, Bosco wants to go do all of his shopping on one of the D (1 \leq D \leq 3000) days of the sales. In fact, he’s already acquired a list of the price adjustments that will be made.

On day i, the cost of card a_i (1 \leq a_i \leq N) is changed to b_i (1 \leq b_i \leq 50), while all other cards remain unchanged. That is, before day 1, all cards have their initial costs (c_{1…N}), and from then on, price adjustments accumulate from day to day.

Additionally, on each day, only certain cards from the store’s inventory are actually up for sale. In particular, on day i, only cards x_i to y_i (1 \leq x_i \leq y_i \leq N), inclusive, may be purchased.

Bosco doesn’t care how much of his budget he spends, but he absolutely must have the best possible deck. As such, for each of the D days, he wants to consider buying some (possibly empty) set of cards, such that the sum of their costs is no larger than B, and the sum of their DQI points is maximal. Determine this DQI sum for each day, so that Bosco will know when to go to take full advantage of the “sales”.
Input

Line 1: 3 integers, B, N, and D

Next N lines: 2 integers, c_i and v_i, for i=1…N

Next D lines: 4 integers, a_i, b_i, x_i, and y_i, for i=1…D
Output

For each day, output the maximal DQI sum of cards up for purchase that day which Bosco can purchase without going over his budget, considering all price changes that have occurred so far.
Example

Input:

5 5 3

9 6

1 5

2 3

3 11

2 7

1 1 1 4

4 6 3 5

4 1 1 4

Output:

22

10

25

Explanation of Sample:

At first, the 5 cards (with point values 6, 5, 3, 11, and 7, respectively) have costs of 9, 1, 2, 3, and 2 dollars, in that order.

On the first day, the cost of the first card is reduced to 1 dollar, and the first 4 cards are up for purchase.

On the second day, the cost of the fourth card is increased to 6 dollars, and only the last 3 cards can be bought.

On the final day, the cost of card 4 is changed again, this time to 1 dollar, and the first 4 cards are once again considered.

On the first day, Bosco should buy the first, second, and fourth cards, costing a total of 5 dollars.

On the second, cards 3 and 5 should be purchased with 4 dollars, as card 4 is now too expensive.

On the final day, all of the cards up for sale can be bought for 5 dollars. Notice that card 1 still costs 1 dollar, from the first price change.

2 Likes

->This<- Problem ?

4 Likes

i tried this problem using this method…getting TLE(as expected)…need to optimize it!!!

can ne1 help in optimizing the solution…or maybe suggest some specific algo for these type of problems!!!

i also have the same problem…i am also getting TLE.Can anyone provide better optimization.

1 Like

I got it…

We can initialize segment tree with knapsack DP for each segment — O(N * log(N) * B). Then we can answer single query in O(log(N) * B^2). Each vertex of segment tree contains a vector p of length B + 1. p[i] is a maximal profit we can get for i dollars using only cards from corresponding subsegment. To combine two segments a and b run for i in 0…B for j int 0…B-i c[i + j] = max(c[i + j], a[i] + b[j]); Total O(N * log(N) * B + D * log(N) * B^2)

After doing this we can get AC.

1 Like
//