제출 #595658

#제출 시각아이디문제언어결과실행 시간메모리
595658serize사탕 분배 (IOI21_candies)C++17
3 / 100
107 ms17192 KiB
#include "candies.h" #include <bits/stdc++.h> #include <cassert> #include <cstdio> #include <vector> #define lowbit(x) x&(-x) using namespace std; const int MAX = 4e5+5; vector<int> ar(MAX), state(MAX), abi(MAX); inline void add(int k, int value){ while(k < MAX){ abi[k] += value; k += lowbit(k); } } inline int read(int k){ int ans = 0; while(k > 0){ ans += abi[k]; k -= lowbit(k); } return ans; } std::vector<int> distribute_candies(std::vector<int> c, std::vector<int> l, std::vector<int> r, std::vector<int> v){ int n; n = c.size(); bool subtask2 = 1; for(int i = 1; i <= n; i++){ ar[i] = c[i-1]; } for(auto i: v){ if(i < 0) subtask2 = 0; } int q = l.size(); if(q <= 2000){ for(int i = 0; i < q; i++){ for(int j = l[i]+1; j <= r[i]+1; j++ ){ if(v[i] < 0) state[j] = max(0,state[j]+v[i]); else state[j] = min(ar[j],state[j]+v[i]); } } } else{ if(subtask2){ for(int i = 0; i < q; i++){ add( l[i]+1, v[i] ); add( r[i]+2, -v[i] ); } for(int i = 1; i <= n; i++){ state[i] = min( ar[i], read(i) ); } } } vector<int> s; for(int i = 1; i <= n; i++){ s.push_back(state[i]); } return s; }
#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...