제출 #1215479

#제출 시각아이디문제언어결과실행 시간메모리
1215479thelegendary08사탕 분배 (IOI21_candies)C++17
8 / 100
88 ms13640 KiB
#include "candies.h"
#include<bits/stdc++.h>
#define int long long
#define vi vector<long long>
#define f0r(i,n) for(int i = 0; i<n; i++)
#define mp make_pair
#define pb push_back
#define FOR(i, k, n) for(int i = k; i<n; i++)
#define pii pair<int,int>
#define dout(x) cout<<x<<' '<<#x<<'\n';
#define vout(x) for(auto u : x)cout<<u<<' '; cout<<'\n';
#define vvi vector<vi>
#define vb vector<bool>
using namespace std;
struct rupq{
	int n; vi tree;
	rupq(int x){
		n = x; tree.resize(4 * n + 5);
	}
	void add(int k, int x){
		k += n; tree[k] += x;
		for(k/=2; k>=1; k/=2)tree[k] = tree[k * 2] + tree[k*2+1];
	}
	long long quer(int l, int r){
		l += n; r += n; int ret = 0;
		while(l <= r){
			if(l % 2 == 1)ret += tree[l++];
			if(r % 2 == 0)ret += tree[r--]; l/=2; r/=2;
		}
		return ret;
	}
	void rangeadd(int l, int r, int x){
		add(l, x);
		if(r != n-1){
			add(r+1, -x);
		}
	}
	long long pointquer(int x){
		return quer(0, x);
	}
};
std::vector<signed> distribute_candies(std::vector<signed> c, std::vector<signed> l,
                                    std::vector<signed> r, std::vector<signed> v) {
    int n = c.size();
    vector<signed> ans(n);
    int q = l.size();
    rupq s = rupq(n);
    f0r(i, q){
    	s.rangeadd(l[i], r[i], v[i]);
    }
    f0r(i,n){
    	ans[i] = min((int)c[i], s.pointquer(i));
    }
    return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...