Submission #72552281
Source Code Expand
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+5,B=500;
const long long INF=1e18;
int n,q,blk;
long long a[N];
int belong[N],L[B],R[B];
long long mx[B],mn[B],add[B];
bool rev[B];
void build(){
blk=sqrt(n);
for(int i=1;i<=n;i++){
belong[i]=(i-1)/blk+1;
if(!L[belong[i]])L[belong[i]]=i;
R[belong[i]]=i;
}
for(int i=1;i<=belong[n];i++){
mx[i]=-INF,mn[i]=INF;
for(int j=L[i];j<=R[i];j++){
mx[i]=max(mx[i],a[j]);
mn[i]=min(mn[i],a[j]);
}
}
}
void push(int b){
// 注意:先处理翻转,再处理加法
if(rev[b]){
for(int i=L[b];i<=R[b];i++){
a[i]=-a[i];
}
rev[b]=0;
}
if(add[b]){
for(int i=L[b];i<=R[b];i++){
a[i]+=add[b];
}
add[b]=0;
}
}
void update_block(int b){
mx[b]=-INF,mn[b]=INF;
for(int i=L[b];i<=R[b];i++){
mx[b]=max(mx[b],a[i]);
mn[b]=min(mn[b],a[i]);
}
}
void update_add(int l,int r,long long v){
int bl=belong[l],br=belong[r];
if(bl==br){
push(bl);
for(int i=l;i<=r;i++)a[i]+=v;
update_block(bl);
}else{
push(bl);
for(int i=l;i<=R[bl];i++)a[i]+=v;
update_block(bl);
for(int i=bl+1;i<br;i++){
// 对于整块:如果有翻转标记,加法要取反
if(rev[i]){
add[i]-=v;
mx[i]-=v;
mn[i]-=v;
}else{
add[i]+=v;
mx[i]+=v;
mn[i]+=v;
}
}
push(br);
for(int i=L[br];i<=r;i++)a[i]+=v;
update_block(br);
}
}
void update_rev(int l,int r){
int bl=belong[l],br=belong[r];
if(bl==br){
push(bl);
for(int i=l;i<=r;i++)a[i]=-a[i];
update_block(bl);
}else{
push(bl);
for(int i=l;i<=R[bl];i++)a[i]=-a[i];
update_block(bl);
for(int i=bl+1;i<br;i++){
rev[i]^=1;
swap(mx[i],mn[i]);
mx[i]=-mx[i];
mn[i]=-mn[i];
}
push(br);
for(int i=L[br];i<=r;i++)a[i]=-a[i];
update_block(br);
}
}
long long query_max(int l,int r){
int bl=belong[l],br=belong[r];
long long res=-INF;
if(bl==br){
push(bl);
for(int i=l;i<=r;i++)res=max(res,a[i]);
update_block(bl);
}else{
push(bl);
for(int i=l;i<=R[bl];i++)res=max(res,a[i]);
update_block(bl);
for(int i=bl+1;i<br;i++){
if(rev[i]){
// 有翻转标记时,最大值是-min + add
res=max(res,-mn[i]+add[i]);
}else{
res=max(res,mx[i]+add[i]);
}
}
push(br);
for(int i=L[br];i<=r;i++)res=max(res,a[i]);
update_block(br);
}
return res;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
cin>>n>>q;
// 初始数组全为0
for(int i=1;i<=n;i++)a[i]=0;
build();
while(q--){
int t,l,r;
long long x;
cin>>t>>l>>r;
if(t==1){
cin>>x;
update_add(l,r,x);
}else if(t==2){
update_rev(l,r);
}else{
long long ans=query_max(l,r);
cout<<ans<<'\n';
}
}
return 0;
}
Submission Info
| Submission Time | |
|---|---|
| Task | G - Takoyaki and Flip |
| User | kac17 |
| Language | C++23 (GCC 15.2.0) |
| Score | 0 |
| Code Size | 3578 Byte |
| Status | WA |
| Exec Time | 337 ms |
| Memory | 6136 KiB |
Judge Result
| Set Name | Sample | All | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Score / Max Score | 0 / 0 | 0 / 575 | ||||||||
| Status |
|
|
| Set Name | Test Cases |
|---|---|
| Sample | 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt |
| All | 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt, 01_random_03.txt, 01_random_04.txt, 01_random_05.txt, 01_random_06.txt, 01_random_07.txt, 01_random_08.txt, 01_random_09.txt, 01_random_10.txt, 01_random_11.txt, 01_random_12.txt, 01_random_13.txt, 01_random_14.txt, 01_random_15.txt, 01_random_16.txt, 01_random_17.txt, 01_random_18.txt, 01_random_19.txt, 01_random_20.txt, 01_random_21.txt, 01_random_22.txt, 01_random_23.txt, 01_random_24.txt, 01_random_25.txt, 01_random_26.txt, 01_random_27.txt, 01_random_28.txt, 01_random_29.txt, 01_random_30.txt, 01_random_31.txt, 01_random_32.txt, 01_random_33.txt, 01_random_34.txt, 01_random_35.txt, 01_random_36.txt, 01_random_37.txt, 01_random_38.txt, 01_random_39.txt, 01_random_40.txt, 01_random_41.txt, 01_random_42.txt, 01_random_43.txt, 01_random_44.txt, 01_random_45.txt, 01_random_46.txt, 01_random_47.txt, 01_random_48.txt, 01_random_49.txt, 01_random_50.txt, 01_random_51.txt, 01_random_52.txt, 01_random_53.txt, 01_random_54.txt, 01_random_55.txt, 01_random_56.txt, 01_random_57.txt, 01_random_58.txt, 01_random_59.txt, 01_random_60.txt, 01_random_61.txt, 01_random_62.txt, 01_random_63.txt, 01_random_64.txt |
| Case Name | Status | Exec Time | Memory |
|---|---|---|---|
| 00_sample_00.txt | AC | 2 ms | 3652 KiB |
| 00_sample_01.txt | WA | 1 ms | 3552 KiB |
| 00_sample_02.txt | WA | 1 ms | 3632 KiB |
| 01_random_03.txt | WA | 336 ms | 5896 KiB |
| 01_random_04.txt | WA | 335 ms | 5976 KiB |
| 01_random_05.txt | WA | 334 ms | 6136 KiB |
| 01_random_06.txt | WA | 335 ms | 6024 KiB |
| 01_random_07.txt | WA | 332 ms | 6032 KiB |
| 01_random_08.txt | WA | 337 ms | 5868 KiB |
| 01_random_09.txt | WA | 332 ms | 6000 KiB |
| 01_random_10.txt | WA | 337 ms | 6116 KiB |
| 01_random_11.txt | WA | 335 ms | 5984 KiB |
| 01_random_12.txt | WA | 337 ms | 5996 KiB |
| 01_random_13.txt | WA | 334 ms | 5996 KiB |
| 01_random_14.txt | WA | 335 ms | 5964 KiB |
| 01_random_15.txt | WA | 335 ms | 5996 KiB |
| 01_random_16.txt | WA | 52 ms | 4392 KiB |
| 01_random_17.txt | WA | 134 ms | 4140 KiB |
| 01_random_18.txt | WA | 107 ms | 5020 KiB |
| 01_random_19.txt | WA | 133 ms | 4360 KiB |
| 01_random_20.txt | WA | 141 ms | 4528 KiB |
| 01_random_21.txt | WA | 143 ms | 4116 KiB |
| 01_random_22.txt | WA | 14 ms | 5520 KiB |
| 01_random_23.txt | WA | 15 ms | 4136 KiB |
| 01_random_24.txt | WA | 319 ms | 6056 KiB |
| 01_random_25.txt | WA | 322 ms | 6000 KiB |
| 01_random_26.txt | WA | 322 ms | 6024 KiB |
| 01_random_27.txt | WA | 321 ms | 6116 KiB |
| 01_random_28.txt | WA | 319 ms | 5996 KiB |
| 01_random_29.txt | WA | 322 ms | 5996 KiB |
| 01_random_30.txt | WA | 322 ms | 5868 KiB |
| 01_random_31.txt | WA | 319 ms | 5996 KiB |
| 01_random_32.txt | WA | 71 ms | 4776 KiB |
| 01_random_33.txt | WA | 150 ms | 5396 KiB |
| 01_random_34.txt | WA | 99 ms | 3952 KiB |
| 01_random_35.txt | WA | 80 ms | 4464 KiB |
| 01_random_36.txt | WA | 160 ms | 5424 KiB |
| 01_random_37.txt | WA | 324 ms | 5900 KiB |
| 01_random_38.txt | WA | 323 ms | 5976 KiB |
| 01_random_39.txt | WA | 323 ms | 5936 KiB |
| 01_random_40.txt | WA | 323 ms | 5996 KiB |
| 01_random_41.txt | WA | 323 ms | 6116 KiB |
| 01_random_42.txt | WA | 323 ms | 5968 KiB |
| 01_random_43.txt | WA | 323 ms | 6024 KiB |
| 01_random_44.txt | WA | 324 ms | 6008 KiB |
| 01_random_45.txt | WA | 123 ms | 5384 KiB |
| 01_random_46.txt | WA | 84 ms | 4832 KiB |
| 01_random_47.txt | WA | 140 ms | 5472 KiB |
| 01_random_48.txt | WA | 123 ms | 3888 KiB |
| 01_random_49.txt | WA | 66 ms | 4576 KiB |
| 01_random_50.txt | WA | 251 ms | 5948 KiB |
| 01_random_51.txt | WA | 255 ms | 5848 KiB |
| 01_random_52.txt | WA | 253 ms | 5976 KiB |
| 01_random_53.txt | WA | 301 ms | 6032 KiB |
| 01_random_54.txt | WA | 302 ms | 5868 KiB |
| 01_random_55.txt | WA | 302 ms | 5984 KiB |
| 01_random_56.txt | WA | 303 ms | 6024 KiB |
| 01_random_57.txt | WA | 301 ms | 5868 KiB |
| 01_random_58.txt | WA | 101 ms | 4440 KiB |
| 01_random_59.txt | WA | 118 ms | 5196 KiB |
| 01_random_60.txt | WA | 114 ms | 6036 KiB |
| 01_random_61.txt | WA | 286 ms | 6116 KiB |
| 01_random_62.txt | WA | 287 ms | 6116 KiB |
| 01_random_63.txt | WA | 283 ms | 5936 KiB |
| 01_random_64.txt | WA | 22 ms | 3596 KiB |