Submission #766107

#TimeUsernameProblemLanguageResultExecution timeMemory
766107mgl_diamondGrowing Trees (BOI11_grow)C++14
100 / 100
58 ms3396 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; using ii = pair<int, int>; #define foru(i, l, r) for(int i=(l); i<=(r); ++i) #define ford(i, l, r) for(int i=(l); i>=(r); --i) #define fore(x, v) for(auto &x : v) #define fi first #define se second void setIO(string name) { if (!name.empty()) { freopen((name + ".in").c_str(), "r", stdin); freopen((name + ".out").c_str(), "w", stdout); } } const int N = 1e5+5; const int LOG = 17; int n, m, a[N], bit[N]; void modify(int i, int v) { for(; i<=n; i+=i&-i) bit[i] += v; } int query(int i) { int ans = 0; for(; i>=1; i-=i&-i) ans += bit[i]; return ans; } void inc(int l, int r, int val) { modify(l, val); modify(r+1, -val); } int lst(int val) { int cur = 0, till = 0; for(int i=LOG-1; i>=0; --i) if (cur+(1<<i) <= n && till+bit[cur+(1<<i)] <= val) cur += 1 << i, till += bit[cur]; return cur; } void solve () { cin >> n >> m; foru(i, 1, n) cin >> a[i]; sort(a+1, a+n+1); foru(i, 1, n) modify(i, a[i] - a[i-1]); foru(i, 1, m) { char cmd; cin >> cmd; if (cmd == 'F') { int c, h; cin >> c >> h; int lb = lst(h-1)+1, alpha = min(n, lb+c-1); int mx_value = query(alpha); int rb = lst(mx_value), rx = lst(mx_value-1); inc(lb, rx, 1); int lx = max(rx+1, rb - (c - (rx-lb+1)) + 1); inc(lx, rb, 1); } else { int mn, mx; cin >> mn >> mx; cout << lst(mx) - lst(mn-1) << "\n"; } } } int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); setIO(""); solve(); }

Compilation message (stderr)

grow.cpp: In function 'void setIO(std::string)':
grow.cpp:14:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   14 |     freopen((name + ".in").c_str(), "r", stdin);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
grow.cpp:15:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   15 |     freopen((name + ".out").c_str(), "w", stdout);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#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...
#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...