#include<stdio.h>
#include<stdlib.h>
#define N 300000
#define Q 300000
int n, q, *eh[N+1], eo[N+1];
long long d,ans[Q];
void push(int i,int j)
{
int o=eo[i]++;
if(!o)eh[i]=(int*)malloc(2*sizeof**eh);
else if(!(o&o-1))eh[i]=(int*)realloc(eh[i],2*o*sizeof**eh);
eh[i][o]=j;
}
/*
* sweep from left to right,
*
* decompose fishes to dominoes
*
* amortized O(n) dominoes move
*
*
* need segtree that can
* decrease k from a[l..r], add k to b[l..r]
* point query a[i]
* range query b[l..r]
*/
#define N_ (((N+1)<<2)+1)
long long ta[N_], la[N_], tb[N_], lb[N_], c;
int dominoes[N+1], top;
void pul(int v,int l,int r)
{
long long m=l+(r-l)/2, w1=m-l+1, w2=r-m;
ta[v] = ta[2*v] + ta[2*v+1] + w1 * la[2*v] + w2 * la[2*v+1];
tb[v] = tb[2*v] + tb[2*v+1] + w1 * lb[2*v] + w2 * lb[2*v+1];
}
void add(int x,int y,long long k,long long k2,int v,int l,int r)
{
if (r < x || y < l) return;
if (x <= l && r <= y)
{
la[v] += k;
lb[v] += k2;
return;
}
add(x, y, k, k2, 2*v, l, l+(r-l)/2);
add(x, y, k, k2, 2*v+1, l+(r-l)/2+1, r);
pul(v, l, r);
}
void add_(int x,int y,long long k,long long k2) { add(x, y, k, k2, 1, 0, n); }
long long query1(int p,int v,int l,int r)
{
if(l==r)return ta[v] + la[v];
return la[v] + (p <= l+(r-l)/2 ? query1(p,2*v,l,l+(r-l)/2): query1(p,2*v+1,l+(r-l)/2+1,r));
}
long long query1_(int p) { return query1(p, 1, 0, n); }
int max(int i,int j){return i>j?i:j;}
int min(int i,int j){return i<j?i:j;}
int overlap(int x,int y,int a, int b) { return(y<a||b<x)? 0:min(b,y)-max(x,a)+1; }
long long query2(int x,int y,int v,int l,int r)
{
if(r<x||y<l)return 0;
if (x<=l&&r<=y) return lb[v] * (r-l+1ll) + tb[v];
return lb[v] * overlap(x,y,l,r) + query2(x, y, 2*v, l, l+(r-l)/2) + query2(x, y, 2*v+1, l+(r-l)/2+1, r);
}
long long query2_(int x,int y) { return query2(x, y, 1, 0, n); }
int broken = 0;
void fix(int r)
{
long long delta = query1_(r-1) - query1_(r);
if (delta <= 0)
return;
long long ii = (delta + d - 1) / d;
if (query1_(dominoes[top]) < d * ii)
{
int lower = dominoes[top], upper = r;
while (upper - lower > 1)
{
int mid = lower + (upper - lower) / 2;
if (query1_(mid) < d * ii) lower = mid;
else upper = mid;
}
if (lower > broken)
{
broken = lower;
add_(broken, broken, -1e18, 0);
dominoes[top=1]=broken+1;
}
}
add_(dominoes[top], r-1, -ii * d, ii);
}
int main()
{
scanf("%d%lld",&n,&d);
add_(0, 0, -1e18, 0);
for(int i=1;i<=n;++i)scanf("%lld",&c), add_(i, i, c, 0);
scanf("%d",&q);
for(int ll,rr,i=0;i<q;++i)scanf("%d%d",&ll,&rr),push(rr,i),push(rr,ll);
for(int r=1;r<=n;++r)
{
fix(r);
while (top && query1_(dominoes[top]) - query1_(dominoes[top]-1) < d)
fix(dominoes[top--]);
if (query1_(r) - query1_(r-1) >= d)
dominoes[++top] = r;
for(int j=0;j<eo[r];j+=2)
{
int ll=eh[r][j+1], ii=eh[r][j];
if (broken >= ll)
ans[ii] = -1;
else
ans[ii] = query2_(ll, r);
}
}
for(int i=0;i<q;++i)printf("%lld\n",ans[i]);
}
Compilation message
Main.c: In function 'push':
Main.c:15:18: warning: suggest parentheses around '-' in operand of '&' [-Wparentheses]
15 | else if(!(o&o-1))eh[i]=(int*)realloc(eh[i],2*o*sizeof**eh);
| ~^~
Main.c: In function 'main':
Main.c:109:5: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
109 | scanf("%d%lld",&n,&d);
| ^~~~~~~~~~~~~~~~~~~~~
Main.c:111:26: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
111 | for(int i=1;i<=n;++i)scanf("%lld",&c), add_(i, i, c, 0);
| ^~~~~~~~~~~~~~~~
Main.c:113:5: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
113 | scanf("%d",&q);
| ^~~~~~~~~~~~~~
Main.c:114:31: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
114 | for(int ll,rr,i=0;i<q;++i)scanf("%d%d",&ll,&rr),push(rr,i),push(rr,ll);
| ^~~~~~~~~~~~~~~~~~~~~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
10588 KB |
Output is correct |
2 |
Correct |
1 ms |
10588 KB |
Output is correct |
3 |
Correct |
1 ms |
10588 KB |
Output is correct |
4 |
Correct |
5 ms |
10824 KB |
Output is correct |
5 |
Correct |
4 ms |
10588 KB |
Output is correct |
6 |
Correct |
4 ms |
10812 KB |
Output is correct |
7 |
Correct |
3 ms |
10588 KB |
Output is correct |
8 |
Correct |
4 ms |
10844 KB |
Output is correct |
9 |
Correct |
4 ms |
10840 KB |
Output is correct |
10 |
Correct |
4 ms |
10844 KB |
Output is correct |
11 |
Correct |
5 ms |
10844 KB |
Output is correct |
12 |
Correct |
4 ms |
10844 KB |
Output is correct |
13 |
Correct |
4 ms |
10844 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
411 ms |
40736 KB |
Output is correct |
2 |
Correct |
372 ms |
36948 KB |
Output is correct |
3 |
Correct |
70 ms |
15508 KB |
Output is correct |
4 |
Correct |
335 ms |
41300 KB |
Output is correct |
5 |
Correct |
336 ms |
41044 KB |
Output is correct |
6 |
Correct |
327 ms |
40800 KB |
Output is correct |
7 |
Correct |
315 ms |
40804 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
115 ms |
19484 KB |
Output is correct |
2 |
Correct |
520 ms |
45136 KB |
Output is correct |
3 |
Correct |
509 ms |
45156 KB |
Output is correct |
4 |
Correct |
514 ms |
45152 KB |
Output is correct |
5 |
Correct |
511 ms |
45652 KB |
Output is correct |
6 |
Correct |
472 ms |
41764 KB |
Output is correct |
7 |
Correct |
470 ms |
41808 KB |
Output is correct |
8 |
Correct |
486 ms |
42008 KB |
Output is correct |
9 |
Correct |
476 ms |
41816 KB |
Output is correct |
10 |
Correct |
388 ms |
37752 KB |
Output is correct |
11 |
Correct |
428 ms |
37900 KB |
Output is correct |
12 |
Correct |
473 ms |
42012 KB |
Output is correct |
13 |
Correct |
446 ms |
41884 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
371 ms |
31060 KB |
Output is correct |
2 |
Correct |
399 ms |
37916 KB |
Output is correct |
3 |
Correct |
200 ms |
25552 KB |
Output is correct |
4 |
Correct |
456 ms |
37972 KB |
Output is correct |
5 |
Correct |
494 ms |
44328 KB |
Output is correct |
6 |
Correct |
562 ms |
45268 KB |
Output is correct |
7 |
Correct |
432 ms |
35840 KB |
Output is correct |
8 |
Correct |
528 ms |
44856 KB |
Output is correct |
9 |
Correct |
333 ms |
37380 KB |
Output is correct |
10 |
Correct |
269 ms |
41088 KB |
Output is correct |
11 |
Correct |
394 ms |
45584 KB |
Output is correct |
12 |
Correct |
325 ms |
45140 KB |
Output is correct |
13 |
Correct |
537 ms |
52768 KB |
Output is correct |
14 |
Correct |
434 ms |
44368 KB |
Output is correct |
15 |
Correct |
525 ms |
52480 KB |
Output is correct |
16 |
Correct |
436 ms |
44904 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
10588 KB |
Output is correct |
2 |
Correct |
1 ms |
10588 KB |
Output is correct |
3 |
Correct |
1 ms |
10588 KB |
Output is correct |
4 |
Correct |
5 ms |
10824 KB |
Output is correct |
5 |
Correct |
4 ms |
10588 KB |
Output is correct |
6 |
Correct |
4 ms |
10812 KB |
Output is correct |
7 |
Correct |
3 ms |
10588 KB |
Output is correct |
8 |
Correct |
4 ms |
10844 KB |
Output is correct |
9 |
Correct |
4 ms |
10840 KB |
Output is correct |
10 |
Correct |
4 ms |
10844 KB |
Output is correct |
11 |
Correct |
5 ms |
10844 KB |
Output is correct |
12 |
Correct |
4 ms |
10844 KB |
Output is correct |
13 |
Correct |
4 ms |
10844 KB |
Output is correct |
14 |
Correct |
411 ms |
40736 KB |
Output is correct |
15 |
Correct |
372 ms |
36948 KB |
Output is correct |
16 |
Correct |
70 ms |
15508 KB |
Output is correct |
17 |
Correct |
335 ms |
41300 KB |
Output is correct |
18 |
Correct |
336 ms |
41044 KB |
Output is correct |
19 |
Correct |
327 ms |
40800 KB |
Output is correct |
20 |
Correct |
315 ms |
40804 KB |
Output is correct |
21 |
Correct |
115 ms |
19484 KB |
Output is correct |
22 |
Correct |
520 ms |
45136 KB |
Output is correct |
23 |
Correct |
509 ms |
45156 KB |
Output is correct |
24 |
Correct |
514 ms |
45152 KB |
Output is correct |
25 |
Correct |
511 ms |
45652 KB |
Output is correct |
26 |
Correct |
472 ms |
41764 KB |
Output is correct |
27 |
Correct |
470 ms |
41808 KB |
Output is correct |
28 |
Correct |
486 ms |
42008 KB |
Output is correct |
29 |
Correct |
476 ms |
41816 KB |
Output is correct |
30 |
Correct |
388 ms |
37752 KB |
Output is correct |
31 |
Correct |
428 ms |
37900 KB |
Output is correct |
32 |
Correct |
473 ms |
42012 KB |
Output is correct |
33 |
Correct |
446 ms |
41884 KB |
Output is correct |
34 |
Correct |
371 ms |
31060 KB |
Output is correct |
35 |
Correct |
399 ms |
37916 KB |
Output is correct |
36 |
Correct |
200 ms |
25552 KB |
Output is correct |
37 |
Correct |
456 ms |
37972 KB |
Output is correct |
38 |
Correct |
494 ms |
44328 KB |
Output is correct |
39 |
Correct |
562 ms |
45268 KB |
Output is correct |
40 |
Correct |
432 ms |
35840 KB |
Output is correct |
41 |
Correct |
528 ms |
44856 KB |
Output is correct |
42 |
Correct |
333 ms |
37380 KB |
Output is correct |
43 |
Correct |
269 ms |
41088 KB |
Output is correct |
44 |
Correct |
394 ms |
45584 KB |
Output is correct |
45 |
Correct |
325 ms |
45140 KB |
Output is correct |
46 |
Correct |
537 ms |
52768 KB |
Output is correct |
47 |
Correct |
434 ms |
44368 KB |
Output is correct |
48 |
Correct |
525 ms |
52480 KB |
Output is correct |
49 |
Correct |
436 ms |
44904 KB |
Output is correct |
50 |
Correct |
517 ms |
52820 KB |
Output is correct |
51 |
Correct |
470 ms |
46376 KB |
Output is correct |
52 |
Correct |
501 ms |
49540 KB |
Output is correct |
53 |
Correct |
417 ms |
45276 KB |
Output is correct |
54 |
Correct |
449 ms |
49616 KB |
Output is correct |
55 |
Correct |
524 ms |
52736 KB |
Output is correct |
56 |
Correct |
366 ms |
46388 KB |
Output is correct |
57 |
Correct |
357 ms |
44092 KB |
Output is correct |
58 |
Correct |
348 ms |
41296 KB |
Output is correct |
59 |
Correct |
471 ms |
50748 KB |
Output is correct |
60 |
Correct |
424 ms |
48196 KB |
Output is correct |
61 |
Correct |
395 ms |
45228 KB |
Output is correct |
62 |
Correct |
375 ms |
44028 KB |
Output is correct |
63 |
Correct |
442 ms |
49488 KB |
Output is correct |
64 |
Correct |
409 ms |
47248 KB |
Output is correct |