样例能过
#include<bits/stdc++.h>
#define N 10005
#define M 205
#define inf 0x3f3f3f3f
#define ls p<<1
#define rs p<<1|1
#define ll long long
using namespace std;
inline ll read()
{
ll k=0,f=0;char c=getchar();
for(;!isdigit(c);c=getchar()) f|=c=='-';
for(;isdigit(c);c=getchar()) k=(k<<1)+(k<<3)+(c^48);
return f?-k:k;
}
mt19937_64 rnd(time(0));
ll n,m,Q,w[N][M];
ll node,root[M];
stack<ll> stk;
string opt;
struct tree
{
ll lson[N<<5],rson[N<<5],val[N<<5],tot[N<<5],siz[N<<5],key[N<<5],tmp[M];
ll new_node(ll num)
{
ll p;
if(!stk.empty()) p=stk.top(),stk.pop();
else p=++node;
val[p]=tot[p]=num,siz[p]=1,key[p]=rnd(),lson[p]=rson[p]=0;
return p;
}
void push_up(ll p)
{
siz[p]=siz[lson[p]]+siz[rson[p]]+1,tot[p]=tot[lson[p]]+tot[rson[p]]+val[p];
return;
}
void split(ll p,ll k,ll &x,ll &y)
{
if(!p)
{
x=y=0;
return;
}
if(k<=siz[lson[p]]) y=p,split(lson[p],k,x,lson[p]);
else x=p,split(rson[p],k-siz[lson[p]]-1,rson[p],y);
push_up(p);
}
ll merge(ll x,ll y)
{
if(!x) return y;
if(!y) return x;
if(key[x]<key[y])
{
rson[x]=merge(rson[x],y),push_up(x);
return x;
}
else
{
lson[y]=merge(x,lson[y]),push_up(y);
return y;
}
}
ll build(ll i,ll l,ll r)
{
if(l==r) return new_node(w[l][i]);
ll mid=(l+r)>>1;
return merge(build(i,l,mid),build(i,mid+1,r));
}
void insert()
{
ll pos=read(),k=read();
for(ll i=1;i<=m;i++) tmp[i]=0;
while(k--)
{
ll x=read()+1;
tmp[x]=read();
}
for(ll i=1;i<=m;i++)
{
ll x,y,z;
split(root[i],pos,x,y),z=new_node(tmp[i]);
root[i]=merge(merge(x,z),y);
}
}
void del()
{
ll pos=read();
for(ll i=1;i<=m;i++)
{
ll x,y,z;
split(x,pos-1,x,y),split(y,1,y,z),root[i]=merge(x,z);
stk.push(y);
}
}
void query()
{
ll l=read(),r=read();
for(ll i=1;i<=m;i++)
{
ll x,y,z;
split(root[i],r,x,y),split(x,l-1,x,z);
printf("%lld ",tot[z]);
root[i]=merge(merge(x,z),y);
}
puts("");
}
}t;
int main()
{
n=read(),m=read(),t.tot[0]=t.val[0]=t.siz[0]=0;
for(ll i=1;i<=n;i++)
{
ll k=read();
while(k--)
{
ll x=read()+1;
w[i][x]=read();
}
}
for(ll i=1;i<=m;i++) root[i]=t.build(i,1,n);
Q=read();
while(Q--)
{
cin>>opt;
if(opt=="I") t.insert();
else if(opt=="D") t.del();
else if(opt=="QA") printf("%lld\n",t.siz[root[1]]);
else t.query();
}
printf("end");
return 0;
}