Submission #1215475

#TimeUsernameProblemLanguageResultExecution timeMemory
1215475thelegendary08Distributing Candies (IOI21_candies)C++17
0 / 100
86 ms10564 KiB
#include "candies.h"
#include<bits/stdc++.h>
#define vi vector<int>
#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];
	}
	int 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);
		}
	}
	int pointquer(int x){
		return quer(0, x);
	}
};
std::vector<int> distribute_candies(std::vector<int> c, std::vector<int> l,
                                    std::vector<int> r, std::vector<int> v) {
    int n = c.size();
    vi 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(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...