結果

問題 No.255 Splarrraaay スプラーレェーーイ
ユーザー 沙耶花
提出日時 2022-03-23 17:04:53
言語 C++17
(gcc 13.3.0 + boost 1.87.0)
結果
MLE  
実行時間 -
コード長 2,381 bytes
コンパイル時間 4,393 ms
コンパイル使用メモリ 269,140 KB
最終ジャッジ日時 2025-01-28 11:07:35
ジャッジサーバーID
(参考情報)
judge4 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 1 MLE * 9
権限があれば一括ダウンロードができます

ソースコード

diff #
プレゼンテーションモードにする

#include <stdio.h>
#include <bits/stdc++.h>
#include <atcoder/all>
using namespace atcoder;
using namespace std;
#define rep(i,n) for(int i=0;i<(n);i++)
#define Inf 1000000001
struct Data{
__int128 cnt[6],sum[6];
Data(){
rep(i,6){
cnt[i] = 0;
sum[i] = 0;
}
}
};
struct D2{
int color=-1;
__int128 num = 0;
bool f = false;
};
Data op(Data a,Data b){
rep(i,6){
a.cnt[i] += b.cnt[i];
a.sum[i] += b.sum[i];
}
return a;
}
Data e(){
return Data();
}
Data mapping(D2 a,Data b){
if(a.color==-1)return b;
if(a.f){
rep(i,6){
if(i==a.color)continue;
b.cnt[a.color] += b.cnt[i];
b.sum[i] = 0;
b.cnt[i] = 0;
}
b.sum[a.color] = b.cnt[a.color] * a.num;
}
else{
//cout<<a.color<<','<<a.num<<endl;
rep(i,6){
if(i!=a.color){
b.cnt[a.color] += b.cnt[i];
b.cnt[i] = 0;
b.sum[i] = 0;
}
}
b.sum[a.color] += b.cnt[a.color] * a.num;
}
return b;
}
D2 composition(D2 a,D2 b){
if(a.color==-1)return b;
if(b.color==-1)return a;
if(a.color==b.color){
a.num += b.num;
a.f |= b.f;
}
else{
a.f = true;
}
return a;
}
D2 id(){
return D2();
}
int main(){
long long n,q;
cin>>n>>q;
vector<long long> t;
t.push_back(0);
t.push_back(n);
vector<long long> x(q),l(q),r(q);
rep(i,q){
cin>>x[i]>>l[i]>>r[i];
//l[i]--;//,r[i]--;
r[i]++;
t.push_back(l[i]);
t.push_back(r[i]);
}
sort(t.begin(),t.end());
t.erase(unique(t.begin(),t.end()),t.end());
rep(i,q){
l[i] = distance(t.begin(),lower_bound(t.begin(),t.end(),l[i]));
r[i] = distance(t.begin(),lower_bound(t.begin(),t.end(),r[i]));
}
vector<Data> temp(t.size()-1);
rep(i,temp.size()){
Data x;
x.cnt[0] = t[i+1] - t[i];
temp[i] = x;
}
lazy_segtree<Data,op,e,D2,mapping,composition,id> seg(temp);
vector<__int128> ans(6,0);
rep(i,q){
if(x[i]!=0){
D2 tt;
tt.color = x[i];
tt.num = 1;
seg.apply(l[i],r[i],tt);
}
else{
auto ret = seg.prod(l[i],r[i]);
__int128 m = -1;
for(int j=1;j<6;j++){
m = max(m,ret.sum[j]);
}
int c = 0;
for(int j=1;j<6;j++){
if(m==ret.sum[j])c++;
}
if(c==1){
for(int j=1;j<6;j++){
if(m==ret.sum[j]){
ans[j] += m;
}
}
}
}
}
long long MM = 1000000000000000009;
auto ret = seg.all_prod();
rep(j,6)ans[j] += ret.sum[j];
for(int i=1;i<6;i++){
if(i!=1)cout<<' ';
cout<<((long long)(ans[i]%MM));
}
cout<<endl;
return 0;
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0