Submission #74886991


Source Code Expand

#include<bits/stdc++.h>

// #define XAERIC666
#define int long long
#define pii pair<int,int>
#define fi first
#define se second
#ifndef XAERIC666
  #define xaeric(...) {fprintf(stderr,__VA_ARGS__);fflush(stderr);}
#else
  #define xaeric(...) 114514
#endif
int read(){
  int x=0,f=1;
  char c=getchar();
  while(c<'0'||'9'<c){if(c=='-')f=-1;c=getchar();}
  while('0'<=c&&c<='9'){x=x*10+c-48;c=getchar();}
  return x*f;
}
// void in(int*a,int n){for(int i=1;i<=n;i++)a[i]=read();}
// void out(int*a,int n){for(int i=1;i<=n;i++)printf("%lld%c",a[i]," \n"[i==n]);}
#define rep(i,a,b) for(int i=(a);i<=(b);++i)
#define _rep(i,a,b) for(int i=(b);i>=(a);--i)
#define YES puts("YES");
#define NO puts("NO");
void chmax(auto&a,auto b){if(a<b)a=b;}
void chmin(auto&a,auto b){if(a<b)a=b;}
using namespace std;

const int P=998244353;
const int N=2e5+5,D=25*N;

int n,m,a[N],t[D],tot,ls[D],rs[D],rt[N];
int bld(int cl,int cr){
  int u=++tot;
  if(cl>=cr){
    t[u]=a[cl];
    return u;
  }
  int mid=(cl+cr)/2;
  ls[u]=bld(cl,mid);
  rs[u]=bld(mid+1,cr);
  return u;
}
int cln(int u){
  ++tot;
  t[tot]=t[u];
  ls[tot]=ls[u];
  rs[tot]=rs[u];
  return tot;
}
int chg(int u,int cl,int cr,int p,int x){
  u=cln(u);
  if(cl>=cr){
    t[u]=x;
    return u;
  }
  int mid=(cl+cr)/2;
  if(p<=mid){
    ls[u]=chg(ls[u],cl,mid,p,x);
  }
  else{
    rs[u]=chg(rs[u],mid+1,cr,p,x);
  }
  t[u]=t[ls[u]]+t[rs[u]];
  return u;
}
// int qry(int u,int cl,int cr,int p){
//   if(cl>=cr){
//     return t[u];
//   }
//   int mid=(cl+cr)/2;
//   if(p<=mid){
//     return qry(ls[u],cl,mid,p);
//   }
//   return qry(rs[u],mid+1,cr,p);
// }
int qry(int u,int cl,int cr,int l,int r){
  if(l<=cl&&cr<=r){
    return t[u];
  }
  if(cr<l||r<cl){
    return 0;
  }
  int mid=(cl+cr)/2;
  return qry(ls[u],cl,mid,l,r)+qry(rs[u],mid+1,cr,l,r);
}
int q,cur[N];
void solve(){
  n=read(),m=read(),q=read();
  rt[0]=bld(1,m);
  for(int i=1;i<=n;i++){
    cur[i]=rt[0];
  }
  for(int i=1;i<=q;i++){
    int op=read();
    if(op==1){
      int x=read(),y=read();
      cur[x]=cur[y];
    }
    else if(op==2){
      int x=read(),y=read(),z=read();
      cur[x]=chg(cur[x],1,m,y,z);
    }
    else{
      int x=read(),l=read(),r=read();
      printf("%lld\n",qry(cur[x],1,m,l,r));
    }
  }
}

signed main(){
  int TTTT=1;
  // int TTTT=read();
  while(TTTT--){
    solve();
  }
}

Submission Info

Submission Time
Task G - Copy Query
User Xaeric
Language C++23 (GCC 15.2.0)
Score 600
Code Size 2453 Byte
Status AC
Exec Time 141 ms
Memory 102396 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 600 / 600
Status
AC × 1
AC × 26
Set Name Test Cases
Sample sample_01.txt
All evil_01.txt, evil_02.txt, evil_03.txt, evil_04.txt, evil_05.txt, sample_01.txt, test_01.txt, test_02.txt, test_03.txt, test_04.txt, test_05.txt, test_06.txt, test_07.txt, test_08.txt, test_09.txt, test_10.txt, test_11.txt, test_12.txt, test_13.txt, test_14.txt, test_15.txt, test_16.txt, test_17.txt, test_18.txt, test_19.txt, test_20.txt
Case Name Status Exec Time Memory
evil_01.txt AC 100 ms 61416 KiB
evil_02.txt AC 103 ms 61668 KiB
evil_03.txt AC 116 ms 62252 KiB
evil_04.txt AC 118 ms 64692 KiB
evil_05.txt AC 141 ms 73028 KiB
sample_01.txt AC 1 ms 3736 KiB
test_01.txt AC 1 ms 3516 KiB
test_02.txt AC 1 ms 3592 KiB
test_03.txt AC 1 ms 3736 KiB
test_04.txt AC 15 ms 5440 KiB
test_05.txt AC 25 ms 12332 KiB
test_06.txt AC 25 ms 12204 KiB
test_07.txt AC 37 ms 19288 KiB
test_08.txt AC 37 ms 19360 KiB
test_09.txt AC 54 ms 26668 KiB
test_10.txt AC 52 ms 26560 KiB
test_11.txt AC 95 ms 43992 KiB
test_12.txt AC 91 ms 43992 KiB
test_13.txt AC 93 ms 44084 KiB
test_14.txt AC 72 ms 34208 KiB
test_15.txt AC 82 ms 39292 KiB
test_16.txt AC 73 ms 102396 KiB
test_17.txt AC 98 ms 58520 KiB
test_18.txt AC 99 ms 42964 KiB
test_19.txt AC 76 ms 43160 KiB
test_20.txt AC 94 ms 58376 KiB