-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path1648.txt
More file actions
111 lines (74 loc) · 2.4 KB
/
1648.txt
File metadata and controls
111 lines (74 loc) · 2.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
class Solution {
int mod=1000000007;
public int maxProfit(int[] A, int orders) {
List<Long>list=new ArrayList<>();
list.add(0l);
for(long i:A)list.add(i);
Collections.sort(list);
int cnt=1;
long res=0;
for(int i=list.size()-2;i>=0;i--){
long dif=list.get(i+1)-list.get(i);
if(dif*cnt<=orders){
orders-=dif*cnt;
res=res+cnt*(list.get(i)+1+list.get(i+1))*dif/2;
res%=mod;
}
else{
long div=orders/cnt;
orders-=(div*cnt);
long first=list.get(i+1)-div+1;
res=res+cnt*(first+list.get(i+1))*div/2;
if(orders!=0){
res+=(orders*(first-1));
}
res%=mod;
break;
}
cnt++;
if(orders==0)break;
}
return (int)(res);
}
}
//update version
class Solution {
int mod=1000000007;
public int maxProfit(int[] A, int orders) {
List<Long>list = new ArrayList<>();
list.add(0l);
for(long i : A){
list.add(i);
}
Collections.sort(list);
long res = 0;
long cnt = 1;
for(int i = list.size() - 2; i >=0; i--){
long pre = list.get(i + 1);
long dif = pre - list.get(i);
if(orders >= dif * cnt){ //7 7 8 8
long sum =(list.get(i) + 1 + pre) * dif / 2;
sum *= cnt;
res += sum;
orders -= dif * cnt;
}
else{
long chunk = orders / cnt;
long start = list.get(i + 1) - chunk + 1;
long end = list.get(i + 1);
long completeTake = (start + end) * (end - start + 1) / 2;
completeTake *= cnt;
res += completeTake;
orders -= chunk * cnt;
res += (start - 1) * orders;
orders = 0;
}
cnt++;
res %= mod;
if(orders == 0){
break;
}
}
return (int)(res % mod);
}
}