結果
| 問題 |
No.230 Splarraay スプラレェーイ
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2024-06-12 20:14:32 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 90 ms / 5,000 ms |
| コード長 | 1,278 bytes |
| コンパイル時間 | 4,469 ms |
| コンパイル使用メモリ | 259,472 KB |
| 最終ジャッジ日時 | 2025-02-21 21:20:28 |
|
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 17 |
ソースコード
#include<bits/stdc++.h>
using namespace std;
#include<atcoder/all>
using namespace atcoder;
using ll = long long;
const ll ID = 1e18;
struct S{
ll value,size;
};
S op(S a, S b){
return S{a.value+b.value, a.size+b.size};
}
S e(){
return S{0,0};
}
S mapping(ll f, S x){
if(f!=ID) x.value = f*x.size;
return x;
}
ll composition(ll f, ll g){
if(f==ID) return g;
return f;
}
ll id(){
return ID;
}
int N;
int Q;
vector<ll> x,l,r;
void solve(){
vector<S> v;
for(int i = 0;i<N;i++){
v.push_back(S{0,1});
}
lazy_segtree<S, op, e,ll,mapping, composition, id> seg(v);
ll lans=0,rans=0;
ll addr = 1e9;
for(int i = 0;i<Q;i++){
if(x[i]==1){
seg.apply(l[i],r[i],1);
}else if(x[i]==2){
seg.apply(l[i],r[i],addr);
}else{
ll tmp = seg.prod(l[i],r[i]).value;
ll lcnt = tmp%addr;
ll rcnt = tmp/addr;
if(rcnt>lcnt){
rans+= rcnt;
}
else if(rcnt<lcnt){
lans+= lcnt;
}
}
}
for(int i = 0;i<N;i++){
if(seg.get(i).value==1){
lans++;
}else if(seg.get(i).value==addr){
rans++;
}
}
cout<<lans<<" "<<rans<<endl;
}
signed main(){
cin.tie(nullptr);
ios::sync_with_stdio(false);
cin >> N;
cin >> Q;
x.resize(Q);
l.resize(Q);
r.resize(Q);
for(int i = 0;i<Q;i++){
cin >> x[i] >> l[i] >> r[i];
r[i]++;
}
solve();
}