結果
| 問題 | No.255 Splarrraaay スプラーレェーーイ |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-10-20 23:29:20 |
| 言語 | C++23(gcc16) (gcc 16.2.0 + boost 1.92.0 + ACL) |
| 結果 |
WA
不安定
|
| 実行時間 | - |
| コード長 | 4,132 bytes |
| 記録 | |
| コンパイル時間 | 5,867 ms |
| コンパイル使用メモリ | 366,476 KB |
| 実行使用メモリ | 236,920 KB |
| 最終ジャッジ日時 | 2026-10-20 23:29:46 |
| 合計ジャッジ時間 | 18,373 ms |
|
ジャッジサーバーID (参考情報) |
judge4_0 / judge1_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 1 WA * 9 |
ソースコード
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int mod=1e18+9;
const int MAXN=2400010;
int x[150010],lt[150010],rt[150010];
int u[300010],v[600010],len[600010],p[MAXN],ans[600010];
void build(int rt,int l,int r)
{
if(l>r)return;
if(l==r)p[rt]=len[l];
else
{
int mid=(l+r)/2;
build(rt*2,l,mid);
build(rt*2+1,mid+1,r);
p[rt]=p[rt*2]+p[rt*2+1];
}
}
struct node{
int val[MAXN],lazy1[MAXN];
bool lazy0[MAXN];
void push_up(int rt)
{
val[rt]=val[rt*2]+val[rt*2+1];
}
void push_down1(int rt)
{
if(lazy1[rt]!=0)
{
val[rt*2]+=lazy1[rt]*p[rt*2];
val[rt*2+1]+=lazy1[rt]*p[rt*2+1];
lazy1[rt*2]+=lazy1[rt];
lazy1[rt*2+1]+=lazy1[rt];
lazy1[rt]=0;
}
}
void push_down0(int rt)
{
if(lazy0[rt])
{
val[rt*2]=val[rt*2+1]=0;
lazy0[rt*2]=lazy0[rt*2+1]=1;
lazy1[rt*2]=lazy1[rt*2+1]=0;
lazy0[rt]=0;
}
}
void update1(int rt,int l,int r,int ul,int ur)
{
if(ul>r||ur<l)return;
push_down0(rt);
if(ul<=l&&ur>=r)
{
val[rt]+=p[rt];
++lazy1[rt];
return;
}
push_down1(rt);
int mid=(l+r)/2;
update1(rt*2,l,mid,ul,ur);
update1(rt*2+1,mid+1,r,ul,ur);
push_up(rt);
}
void update0(int rt,int l,int r,int ul,int ur)
{
if(ul>r||ur<l)return;
push_down1(rt);
if(ul<=l&&ur>=r)
{
val[rt]=0;
lazy0[rt]=1;
lazy1[rt]=0;
return;
}
push_down0(rt);
int mid=(l+r)/2;
update0(rt*2,l,mid,ul,ur);
update0(rt*2+1,mid+1,r,ul,ur);
push_up(rt);
}
int query(int rt,int l,int r,int ql,int qr)
{
if(ql>r||qr<l)return 0;
if(ql<=l&&qr>=r)return val[rt];
push_down1(rt);
push_down0(rt);
int mid=(l+r)/2,ans;
ans=query(rt*2,l,mid,ql,qr)+query(rt*2+1,mid+1,r,ql,qr);
return ans;
}
}tr[5];
signed main()
{
// freopen("color.in","r",stdin);
// freopen("color.out","w",stdout);
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
int n,q,k=0;
int L,R,mid;
int a,b,c,d,e,mx,cnt,col;
cin>>n>>q;
for(int i=1;i<=q;i++)
{
cin>>x[i]>>lt[i]>>rt[i];
u[i*2-1]=lt[i];
u[i*2]=rt[i];
}
sort(u+1,u+q*2+1);
for(int i=1;i<=q*2;i++)
{
if(i==1)
{
v[++k]=u[1],len[k]=1;
continue;
}
if(i!=1&&u[i]==u[i-1])continue;
if(u[i]-u[i-1]==1)
{
v[++k]=u[i],len[k]=1;
}
else
{
v[++k]=u[i-1]+1,len[k]=u[i]-u[i-1]-1;
v[++k]=u[i],len[k]=1;
}
}
build(1,1,k);
for(int i=1;i<=q;i++)
{
L=1,R=k;
while(L<=R)
{
mid=(L+R)/2;
if(v[mid]<lt[i])L=mid+1;
else R=mid-1;
}
lt[i]=L;
L=1,R=k;
while(L<=R)
{
mid=(L+R)/2;
if(v[mid]<rt[i])L=mid+1;
else R=mid-1;
}
rt[i]=L;
if(x[i]==0)
{
a=tr[0].query(1,1,k,lt[i],rt[i]);
b=tr[1].query(1,1,k,lt[i],rt[i]);
c=tr[2].query(1,1,k,lt[i],rt[i]);
d=tr[3].query(1,1,k,lt[i],rt[i]);
e=tr[4].query(1,1,k,lt[i],rt[i]);
mx=max(a,max(max(b,c),max(d,e)));
cnt=0;
if(a==mx)++cnt,col=1;
if(b==mx)++cnt,col=2;
if(c==mx)++cnt,col=3;
if(d==mx)++cnt,col=4;
if(e==mx)++cnt,col=5;
if(cnt==1)ans[col]+=mx;
}
else
{
for(int j=1;j<=5;j++)
{
if(j==x[i])tr[j-1].update1(1,1,k,lt[i],rt[i]);
else tr[j-1].update0(1,1,k,lt[i],rt[i]);
}
}
}
for(int i=1;i<=5;i++)
{
ans[i]+=tr[i-1].val[1];
cout<<ans[i]<<" ";
}
return 0;
}