結果
問題 |
No.3017 交互浴
|
ユーザー |
|
提出日時 | 2025-09-04 17:11:40 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 695 ms / 2,000 ms |
コード長 | 1,612 bytes |
コンパイル時間 | 4,296 ms |
コンパイル使用メモリ | 293,248 KB |
実行使用メモリ | 21,908 KB |
最終ジャッジ日時 | 2025-09-04 17:12:27 |
合計ジャッジ時間 | 43,126 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 55 |
ソースコード
#include <bits/stdc++.h> using namespace std; #define rep(i,n) for (int i = 0; i< (n); ++i) #define repi(i, a, b) for (int i = (a); i < (b); ++i) #define all(x) (x).begin(), (x).end() #define fore(i, a) for(auto &i:a) using ll = long long; #include<atcoder/lazysegtree> using namespace atcoder; struct S{ ll value; ll size; }; struct F{ ll value; bool flag; }; S op(S l, S r){ return S{l.value+r.value, l.size+r.size}; } S e(){ return S{0,0}; } S mapping(F f, S x){ if(f.flag){ return S{f.value*x.size, x.size}; } else{ return x; } } F composition(F f, F g){ if(f.flag){ return f; } else{ return g; } } F id(){ return F{0,false}; } template<typename T=int> struct CC { bool initialized; vector<T> xs; CC(): initialized(false) {} void add(T x) { xs.push_back(x);} void init() { sort(xs.begin(), xs.end()); xs.erase(unique(xs.begin(),xs.end()),xs.end()); initialized = true; } int operator()(T x) { if (!initialized) init(); return upper_bound(xs.begin(), xs.end(), x) - xs.begin() - 1; } T operator[](int i) { if (!initialized) init(); return xs[i]; } int size() { if (!initialized) init(); return xs.size(); } }; int main() { ll n; cin >> n; CC<ll> cc; vector<S> vec(n); vector<ll> H(n); rep(i, n){ ll h; cin >> h; H[i] = h; cc.add(h); }; cc.add(0); rep(i, n){ vec[i] = {0, cc[i+1]-cc[i]}; } lazy_segtree<S,op,e,F,mapping,composition,id> seg(vec); rep(i, n){ seg.apply(0, cc(H[i]), {(i+1)%2, true}); cout << seg.all_prod().value << endl; } }