# |
Submission time |
Handle |
Problem |
Language |
Result |
Execution time |
Memory |
981137 |
2024-05-12T21:42:04 Z |
aymanrs |
Fish 3 (JOI24_fish3) |
C++14 |
|
222 ms |
56404 KB |
#include<bits/stdc++.h>
using namespace std;
struct que{
int l, r, id;
};
void f(int l, int r, list<que>& v, long long a[], long long ans[], long long c[]){
if(l==r){
for(auto& i : v){
ans[i.id] = 0;
}
return;
}
int m = l+r>>1;
list<que> L, R, M;
for(const que& i : v){
if(i.r <= m) L.push_back(i);
else if(i.l > m) R.push_back(i);
else M.push_back(i);
}
v.clear();
f(l, m, L, a, ans, c);
f(m+1, r, R, a, ans, c);
long long S = 0;
vector<pair<long long, int>> p;
stack<pair<long long, int>> s;
long long fs[r-m], Fs[r-m];
for(int i = m+1;i <= r;i++){
if(i==m+1) Fs[i-m-1]=0;
else Fs[i-m-1] = Fs[i-m-2];
if(a[i] <= 0) {
S -= i*a[i];
long long k = -a[i];
while(!s.empty() && k){
if(k >= s.top().first) {
k -= s.top().first;
S -= s.top().first*s.top().second;
s.pop();
}
else {
S -= k*s.top().second;
s.top().first -= k;
k = 0;
break;
}
}
Fs[i-m-1] += k;
} else s.push({a[i], i});
fs[i-m-1] = S;
}
S = 0;long long g = 0;
int pt = m;
vector<array<long long, 3>> bs = {{0, 0, -1}};
for(auto& q : M){
while(pt > q.l){
if(a[pt] <= 0){
g -= a[pt];
S -= a[pt]*pt;
} else {
long long k = a[pt];
if(g >= k){
g -= k;
S -= k*pt;
pt--;
continue;
}
S -= g*pt;
k -= g;
g = 0;
bs.back()[2] = pt;
bs.push_back({bs.back()[0]+k, bs.back()[1]-k*pt, -1});
}
pt--;
}
long long k = c[pt];
if(g > k || k+bs.back()[0]-g < Fs[q.r-m-1]){
ans[q.id] = -1;
continue;
}
if(!Fs[q.r-m-1]){
ans[q.id] = S-g*pt+fs[q.r-m-1];
continue;
}
bs.back()[2] = pt;
int low = 0, high = bs.size()-1, best = 0;
while(low<=high){
int mid = low+high>>1;
if(bs[mid][0] >= Fs[q.r-m-1]) {
high=mid-1;
} else {
best = mid;
low = mid+1;
}
}
ans[q.id] = S-g*pt+fs[q.r-m-1]+bs[best][1]-(Fs[q.r-m-1]-bs[best][0])*bs[best][2];
}
}
void solve(){
int n;long long d;cin >> n >> d;
long long a[n+1], c[n+1];a[0]=0;
for(int i = 1;i <= n;i++) {
cin >> a[i];
c[i] = a[i];
}
for(int i = n;i >= 1;i--) {
a[i] = a[i]-a[i-1];
if(a[i] < 0){
a[i] = -a[i];
a[i] = (a[i]+d-1)/d;
a[i] = -a[i];
} else a[i] /= d;
c[i] /= d;
}
int q;cin >> q;
vector<que> qv;
for(int i = 0;i < q;i++){
int l, r;cin >> l >> r;
qv.push_back({l, r, i});
}
sort(qv.begin(), qv.end(), [](const auto& a, const auto& b){
return a.l > b.l;
});
long long ans[q];
list<que> lv(qv.begin(), qv.end());
f(1, n, lv, a, ans, c);
for(int i = 0;i < q;i++) cout << ans[i] << '\n';
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(0);
solve();
}
Compilation message
Main.cpp: In function 'void f(int, int, std::__cxx11::list<que>&, long long int*, long long int*, long long int*)':
Main.cpp:13:11: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
13 | int m = l+r>>1;
| ~^~
Main.cpp:86:17: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
86 | int mid = low+high>>1;
| ~~~^~~~~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
0 ms |
348 KB |
Output is correct |
2 |
Correct |
0 ms |
348 KB |
Output is correct |
3 |
Correct |
0 ms |
348 KB |
Output is correct |
4 |
Correct |
2 ms |
860 KB |
Output is correct |
5 |
Correct |
2 ms |
856 KB |
Output is correct |
6 |
Correct |
2 ms |
724 KB |
Output is correct |
7 |
Correct |
2 ms |
860 KB |
Output is correct |
8 |
Correct |
2 ms |
860 KB |
Output is correct |
9 |
Correct |
3 ms |
860 KB |
Output is correct |
10 |
Correct |
2 ms |
860 KB |
Output is correct |
11 |
Correct |
2 ms |
860 KB |
Output is correct |
12 |
Correct |
2 ms |
820 KB |
Output is correct |
13 |
Correct |
2 ms |
860 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
175 ms |
44468 KB |
Output is correct |
2 |
Correct |
161 ms |
43956 KB |
Output is correct |
3 |
Correct |
109 ms |
36816 KB |
Output is correct |
4 |
Correct |
160 ms |
43188 KB |
Output is correct |
5 |
Correct |
162 ms |
47996 KB |
Output is correct |
6 |
Correct |
169 ms |
48308 KB |
Output is correct |
7 |
Correct |
160 ms |
48052 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
112 ms |
40904 KB |
Output is correct |
2 |
Correct |
208 ms |
48740 KB |
Output is correct |
3 |
Correct |
203 ms |
47436 KB |
Output is correct |
4 |
Correct |
209 ms |
48104 KB |
Output is correct |
5 |
Correct |
214 ms |
47684 KB |
Output is correct |
6 |
Correct |
190 ms |
43956 KB |
Output is correct |
7 |
Correct |
179 ms |
44784 KB |
Output is correct |
8 |
Correct |
194 ms |
44724 KB |
Output is correct |
9 |
Correct |
196 ms |
43956 KB |
Output is correct |
10 |
Correct |
215 ms |
43516 KB |
Output is correct |
11 |
Correct |
220 ms |
43172 KB |
Output is correct |
12 |
Correct |
208 ms |
45960 KB |
Output is correct |
13 |
Correct |
216 ms |
45236 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
155 ms |
42260 KB |
Output is correct |
2 |
Correct |
182 ms |
43504 KB |
Output is correct |
3 |
Correct |
134 ms |
38584 KB |
Output is correct |
4 |
Correct |
191 ms |
43988 KB |
Output is correct |
5 |
Correct |
186 ms |
46928 KB |
Output is correct |
6 |
Correct |
191 ms |
46708 KB |
Output is correct |
7 |
Correct |
176 ms |
46728 KB |
Output is correct |
8 |
Correct |
187 ms |
48308 KB |
Output is correct |
9 |
Correct |
163 ms |
44320 KB |
Output is correct |
10 |
Correct |
161 ms |
47712 KB |
Output is correct |
11 |
Correct |
192 ms |
52328 KB |
Output is correct |
12 |
Correct |
186 ms |
52296 KB |
Output is correct |
13 |
Correct |
192 ms |
54352 KB |
Output is correct |
14 |
Correct |
172 ms |
51240 KB |
Output is correct |
15 |
Correct |
190 ms |
54684 KB |
Output is correct |
16 |
Correct |
184 ms |
50320 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
0 ms |
348 KB |
Output is correct |
2 |
Correct |
0 ms |
348 KB |
Output is correct |
3 |
Correct |
0 ms |
348 KB |
Output is correct |
4 |
Correct |
2 ms |
860 KB |
Output is correct |
5 |
Correct |
2 ms |
856 KB |
Output is correct |
6 |
Correct |
2 ms |
724 KB |
Output is correct |
7 |
Correct |
2 ms |
860 KB |
Output is correct |
8 |
Correct |
2 ms |
860 KB |
Output is correct |
9 |
Correct |
3 ms |
860 KB |
Output is correct |
10 |
Correct |
2 ms |
860 KB |
Output is correct |
11 |
Correct |
2 ms |
860 KB |
Output is correct |
12 |
Correct |
2 ms |
820 KB |
Output is correct |
13 |
Correct |
2 ms |
860 KB |
Output is correct |
14 |
Correct |
175 ms |
44468 KB |
Output is correct |
15 |
Correct |
161 ms |
43956 KB |
Output is correct |
16 |
Correct |
109 ms |
36816 KB |
Output is correct |
17 |
Correct |
160 ms |
43188 KB |
Output is correct |
18 |
Correct |
162 ms |
47996 KB |
Output is correct |
19 |
Correct |
169 ms |
48308 KB |
Output is correct |
20 |
Correct |
160 ms |
48052 KB |
Output is correct |
21 |
Correct |
112 ms |
40904 KB |
Output is correct |
22 |
Correct |
208 ms |
48740 KB |
Output is correct |
23 |
Correct |
203 ms |
47436 KB |
Output is correct |
24 |
Correct |
209 ms |
48104 KB |
Output is correct |
25 |
Correct |
214 ms |
47684 KB |
Output is correct |
26 |
Correct |
190 ms |
43956 KB |
Output is correct |
27 |
Correct |
179 ms |
44784 KB |
Output is correct |
28 |
Correct |
194 ms |
44724 KB |
Output is correct |
29 |
Correct |
196 ms |
43956 KB |
Output is correct |
30 |
Correct |
215 ms |
43516 KB |
Output is correct |
31 |
Correct |
220 ms |
43172 KB |
Output is correct |
32 |
Correct |
208 ms |
45960 KB |
Output is correct |
33 |
Correct |
216 ms |
45236 KB |
Output is correct |
34 |
Correct |
155 ms |
42260 KB |
Output is correct |
35 |
Correct |
182 ms |
43504 KB |
Output is correct |
36 |
Correct |
134 ms |
38584 KB |
Output is correct |
37 |
Correct |
191 ms |
43988 KB |
Output is correct |
38 |
Correct |
186 ms |
46928 KB |
Output is correct |
39 |
Correct |
191 ms |
46708 KB |
Output is correct |
40 |
Correct |
176 ms |
46728 KB |
Output is correct |
41 |
Correct |
187 ms |
48308 KB |
Output is correct |
42 |
Correct |
163 ms |
44320 KB |
Output is correct |
43 |
Correct |
161 ms |
47712 KB |
Output is correct |
44 |
Correct |
192 ms |
52328 KB |
Output is correct |
45 |
Correct |
186 ms |
52296 KB |
Output is correct |
46 |
Correct |
192 ms |
54352 KB |
Output is correct |
47 |
Correct |
172 ms |
51240 KB |
Output is correct |
48 |
Correct |
190 ms |
54684 KB |
Output is correct |
49 |
Correct |
184 ms |
50320 KB |
Output is correct |
50 |
Correct |
208 ms |
56280 KB |
Output is correct |
51 |
Correct |
183 ms |
49044 KB |
Output is correct |
52 |
Correct |
198 ms |
51336 KB |
Output is correct |
53 |
Correct |
218 ms |
51380 KB |
Output is correct |
54 |
Correct |
220 ms |
53056 KB |
Output is correct |
55 |
Correct |
208 ms |
56404 KB |
Output is correct |
56 |
Correct |
179 ms |
50376 KB |
Output is correct |
57 |
Correct |
169 ms |
46772 KB |
Output is correct |
58 |
Correct |
162 ms |
48312 KB |
Output is correct |
59 |
Correct |
222 ms |
53148 KB |
Output is correct |
60 |
Correct |
184 ms |
51892 KB |
Output is correct |
61 |
Correct |
213 ms |
50092 KB |
Output is correct |
62 |
Correct |
196 ms |
50188 KB |
Output is correct |
63 |
Correct |
215 ms |
53072 KB |
Output is correct |
64 |
Correct |
184 ms |
50192 KB |
Output is correct |