Submission #831048

#TimeUsernameProblemLanguageResultExecution timeMemory
831048NothingXDDistributing Candies (IOI21_candies)C++17
8 / 100
1627 ms11716 KiB
#include "candies.h" #include <bits/stdc++.h> #pragma GCC optimize("O3,unroll-loops") #pragma GCC target("avx") using namespace std; typedef long long ll; typedef pair<int,int> pii; typedef pair<ll,ll> pll; void debug_out(){cerr << endl;} template<typename Head, typename... Tail> void debug_out(Head H, Tail... T){ cerr << H << ' '; debug_out(T...); } #define debug(...) cerr << "(" << #__VA_ARGS__ << "): ", debug_out(__VA_ARGS__) #define F first #define S second #define all(x) x.begin(), x.end() #define MP(x, y) make_pair(x, y) const int maxn = 2e5 + 10; int n, q, a[maxn], c[maxn], l[maxn], r[maxn], v[maxn]; void add1(int l, int r, int x){ // debug(1, l, r, x); for (int i = l; i <= r; i++){ a[i] = (a[i]+x > c[i]? c[i]: a[i]+x); } } void add2(int l, int r, int x){ // debug(2, l, r, x); for (int i = l; i <= r; i++){ a[i] = (a[i]+x < 0? 0: a[i]+x); } } void add3(int l, int r, int x, int y){ // debug(3, l, r, x, y); for (int i = l; i <= r; i++){ a[i] = (a[i]+x > c[i]? c[i]: a[i]+x); // debug(i, a[i]); a[i] = (a[i]+y < 0? 0: a[i]+y); // debug(i, a[i]); } } void add4(int l, int r, int x, int y){ //debug(4, l, r, x, y); for (int i = l; i <= r; i++){ a[i] = (a[i]+x < 0? 0: a[i]+x); a[i] = (a[i]+y < c[i]? c[i]: a[i]+y); } } vector<int> distribute_candies(vector<int> C, vector<int> L, vector<int> R, vector<int> V) { n = C.size(); q = L.size(); for (int i = 0; i < n; i++){ c[i] = C[i]; } for (int i = 0; i < q; i++){ l[i] = L[i]; r[i] = R[i]; v[i] = V[i]; } for (int i = 0; i < q; i += 2){ if (i + 1 == q){ if (v[i] > 0) add1(l[i], r[i], v[i]); if (v[i] < 0) add2(l[i], r[i], v[i]); } if (v[i] == 0 && v[i+1] == 0) continue; if (v[i] >= 0 && v[i+1] >= 0){ add1(l[i], min(r[i], l[i+1]-1), v[i]); add1(l[i+1], min(r[i+1], l[i]-1), v[i+1]); add1(max(l[i], l[i+1]), min(r[i], r[i+1]), v[i]+v[i+1]); add1(max(l[i], r[i+1]+1), r[i], v[i]); add1(max(l[i+1], r[i]+1), r[i+1], v[i+1]); } else if (v[i] <= 0 && v[i+1] <= 0){ add2(l[i], min(r[i], l[i+1]-1), v[i]); add2(l[i+1], min(r[i+1], l[i]-1), v[i+1]); add2(max(l[i], l[i+1]), min(r[i], r[i+1]), v[i]+v[i+1]); add2(max(l[i], r[i+1]+1), r[i], v[i]); add2(max(l[i+1], r[i]+1), r[i+1], v[i+1]); } else if (v[i] >= 0 && v[i+1] <= 0){ add1(l[i], min(r[i], l[i+1]-1), v[i]); add2(l[i+1], min(r[i+1], l[i]-1), v[i+1]); add3(max(l[i], l[i+1]), min(r[i], r[i+1]), v[i], v[i+1]); add1(max(l[i], r[i+1]+1), r[i], v[i]); add2(max(l[i+1], r[i]+1), r[i+1], v[i+1]); } else{ add2(l[i], min(r[i], l[i+1]-1), v[i]); add1(l[i+1], min(r[i+1], l[i]-1), v[i+1]); add4(max(l[i], l[i+1]), min(r[i], r[i+1]), v[i], v[i+1]); add2(max(l[i], r[i+1]+1), r[i], v[i]); add1(max(l[i+1], r[i]+1), r[i+1], v[i+1]); } } vector<int> ans; for (int i = 0; i < n; i++){ ans.push_back(a[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...