답안 #466686

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
466686 2021-08-20T07:52:56 Z JvThunder 사탕 분배 (IOI21_candies) C++17
100 / 100
486 ms 36968 KB
#include <bits/stdc++.h>
#define pb push_back
typedef long long ll;
using namespace std;
 
const ll INF = (ll)(1e18);

struct segtree
{
    vector<ll> smx, smn, sum; 
    int N;
    segtree()
    {
        N = 1<<18;
        smx.assign(2*N,0);
        smn.assign(2*N,0);
        sum.assign(2*N,0);
    }

    void upd(int i, int s, int e, int t, ll v) 
    {
	    if(s==e) 
        {
            smx[i] = max(0LL, v);
            smn[i] = min(0LL, v);
            sum[i] = v;
            return;
        }
 
        int m=(s+e)/2;
        if(t<=m) upd(2*i, s, m, t, v);
        else upd(2*i+1, m+1, e, t, v);
        
        sum[i] = sum[2*i]+sum[2*i+1];
        smx[i] = max(smx[2*i],sum[2*i]+smx[2*i+1]);
        smn[i] = min(smn[2*i],sum[2*i]+smn[2*i+1]);
    }
 
    ll get(int i, int s, int e, ll c) 
    {
        if(s==e) return min(max(sum[i], 0LL), c);
    
        int m = (s+e)/2;
        if(smx[2*i+1]-smn[2*i+1]>c) return get(2*i+1, m+1, e, c);
    
        ll r = get(2*i,s,m,c);
        if(r+smx[2*i+1]>c) return c-(smx[2*i+1]-sum[2*i+1]);
        if(r+smn[2*i+1]<0) return sum[2*i+1]-smn[2*i+1];
        return r+sum[2*i+1];
    }

} st;
 
vector<int> distribute_candies(vector<int> c, vector<int> l, vector<int> r, vector<int> v) 
{
	int N=c.size(), Q=l.size();
	vector<int> final_A;
	vector<vector<int>> q(N+1);

	for (int i=0; i<Q; i++) q[l[i]].pb(i+1), q[r[i]+1].pb(-(i+1));
	for (int i=0; i<N; i++) 
    {
		for (auto j:q[i]) 
        {
			if (j>0) j--, st.upd(1, 0, Q-1, j, v[j]);
			else j=-j-1, st.upd(1, 0, Q-1, j, 0);
		}
		final_A.pb(st.get(1, 0, Q-1, c[i]));
	}
    
	return final_A;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 12620 KB Output is correct
2 Correct 6 ms 12620 KB Output is correct
3 Correct 7 ms 12620 KB Output is correct
4 Correct 8 ms 12636 KB Output is correct
5 Correct 9 ms 12768 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 469 ms 30296 KB Output is correct
2 Correct 486 ms 34316 KB Output is correct
3 Correct 426 ms 34232 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 12620 KB Output is correct
2 Correct 282 ms 22652 KB Output is correct
3 Correct 82 ms 22336 KB Output is correct
4 Correct 463 ms 36160 KB Output is correct
5 Correct 459 ms 36712 KB Output is correct
6 Correct 453 ms 36968 KB Output is correct
7 Correct 432 ms 36284 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 12620 KB Output is correct
2 Correct 6 ms 12620 KB Output is correct
3 Correct 127 ms 19056 KB Output is correct
4 Correct 75 ms 20316 KB Output is correct
5 Correct 217 ms 26696 KB Output is correct
6 Correct 206 ms 26608 KB Output is correct
7 Correct 202 ms 26592 KB Output is correct
8 Correct 201 ms 26672 KB Output is correct
9 Correct 212 ms 26676 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 12620 KB Output is correct
2 Correct 6 ms 12620 KB Output is correct
3 Correct 7 ms 12620 KB Output is correct
4 Correct 8 ms 12636 KB Output is correct
5 Correct 9 ms 12768 KB Output is correct
6 Correct 469 ms 30296 KB Output is correct
7 Correct 486 ms 34316 KB Output is correct
8 Correct 426 ms 34232 KB Output is correct
9 Correct 6 ms 12620 KB Output is correct
10 Correct 282 ms 22652 KB Output is correct
11 Correct 82 ms 22336 KB Output is correct
12 Correct 463 ms 36160 KB Output is correct
13 Correct 459 ms 36712 KB Output is correct
14 Correct 453 ms 36968 KB Output is correct
15 Correct 432 ms 36284 KB Output is correct
16 Correct 6 ms 12620 KB Output is correct
17 Correct 6 ms 12620 KB Output is correct
18 Correct 127 ms 19056 KB Output is correct
19 Correct 75 ms 20316 KB Output is correct
20 Correct 217 ms 26696 KB Output is correct
21 Correct 206 ms 26608 KB Output is correct
22 Correct 202 ms 26592 KB Output is correct
23 Correct 201 ms 26672 KB Output is correct
24 Correct 212 ms 26676 KB Output is correct
25 Correct 6 ms 12620 KB Output is correct
26 Correct 76 ms 21296 KB Output is correct
27 Correct 262 ms 22268 KB Output is correct
28 Correct 460 ms 34752 KB Output is correct
29 Correct 426 ms 35256 KB Output is correct
30 Correct 445 ms 35432 KB Output is correct
31 Correct 460 ms 35648 KB Output is correct
32 Correct 431 ms 35756 KB Output is correct