結果
| 問題 |
No.1441 MErGe
|
| コンテスト | |
| ユーザー |
momohara
|
| 提出日時 | 2021-03-26 23:18:15 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,878 bytes |
| コンパイル時間 | 3,294 ms |
| コンパイル使用メモリ | 212,648 KB |
| 最終ジャッジ日時 | 2025-01-19 23:32:50 |
|
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 1 WA * 22 TLE * 5 |
ソースコード
#include <atcoder/lazysegtree.hpp>
#include <bits/stdc++.h>
using namespace std;
using namespace atcoder;
using ll = long long;
using ull = unsigned long long;
using ld = long double;
using P = pair<ll, ll>;
using tp = tuple<ll, ll, ll>;
template <class T>
using vec = vector<T>;
template <class T>
using vvec = vector<vec<T>>;
#define all(hoge) (hoge).begin(), (hoge).end()
#define en '\n'
#define rep(i, m, n) for(ll i = (ll)(m); i < (ll)(n); ++i)
#define rep2(i, m, n) for(ll i = (ll)(n)-1; i >= (ll)(m); --i)
#define REP(i, n) rep(i, 0, n)
#define REP2(i, n) rep2(i, 0, n)
constexpr long long INF = 1LL << 60;
constexpr int INF_INT = 1 << 25;
constexpr long long MOD = (ll)1e9 + 7;
//constexpr long long MOD = 998244353LL;
static const ld pi = 3.141592653589793L;
#pragma GCC target("avx2")
#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")
template <class T>
inline bool chmin(T &a, T b) {
if(a > b) {
a = b;
return true;
}
return false;
}
template <class T>
inline bool chmax(T &a, T b) {
if(a < b) {
a = b;
return true;
}
return false;
}
//グラフ関連
struct Edge {
int to, rev;
ll cap;
Edge(int _to, ll _cap, int _rev) : to(_to), cap(_cap), rev(_rev) {}
};
typedef vector<Edge> Edges;
typedef vector<Edges> Graph;
void add_edge(Graph &G, int from, int to, ll cap, bool revFlag, ll revCap) {
G[from].push_back(Edge(to, cap, (int)G[to].size()));
if(revFlag)
G[to].push_back(Edge(from, revCap, (int)G[from].size() - 1));
}
struct S {
int num;
int sum;
};
struct F {
int num;
int sum;
};
S op(S l, S r) { return S{l.num + r.num, l.sum + r.sum}; }
S e() { return S{0, 0}; }
S mapping(F l, S r) {
if(l.num == INF_INT and l.sum == 0)
return r;
return S{l.num, l.sum};
}
F composition(F l, F r) {
if(l.num == INF_INT and l.sum == 0)
return r;
return l;
}
F id() { return F{INF_INT, 0}; }
ll k = 0;
bool g(S a) {
return a.num <= k;
}
void solve() {
int n, q;
cin >> n >> q;
vec<int> a(n);
REP(i, n) {
cin >> a[i];
}
lazy_segtree<S, op, e, F, mapping, composition, id> seg(vec<S>(n + 2, S{1, 0}));
REP(i, n) {
seg.apply(i, F{1, a[i]});
}
REP(i, q) {
int t, l, r;
cin >> t >> l >> r;
l--;
k = l;
int l2 = seg.max_right<g>(0);
k = r;
int r2 = seg.max_right<g>(0);
if(t == 2) {
cout << seg.prod(l2, r2).sum << endl;
} else {
int sum = seg.prod(l2, r2).sum;
seg.apply(l2, l2 + 1, F{1, sum});
seg.apply(l2 + 1, r2, F{0, 0});
}
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
// ll t;
// cin >> t;
// REP(i, t - 1) {
// solve();
// }
solve();
return 0;
}
momohara