結果
問題 | No.619 CardShuffle |
ユーザー | tails |
提出日時 | 2017-12-19 03:54:03 |
言語 | C (gcc 12.3.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 5,068 bytes |
コンパイル時間 | 1,036 ms |
コンパイル使用メモリ | 32,256 KB |
実行使用メモリ | 8,608 KB |
最終ジャッジ日時 | 2024-06-02 04:30:18 |
合計ジャッジ時間 | 5,824 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 1 ms
6,820 KB |
testcase_01 | WA | - |
testcase_02 | AC | 1 ms
6,816 KB |
testcase_03 | TLE | - |
testcase_04 | -- | - |
testcase_05 | -- | - |
testcase_06 | -- | - |
testcase_07 | -- | - |
testcase_08 | -- | - |
testcase_09 | -- | - |
testcase_10 | -- | - |
testcase_11 | -- | - |
testcase_12 | -- | - |
testcase_13 | -- | - |
testcase_14 | -- | - |
testcase_15 | -- | - |
testcase_16 | -- | - |
testcase_17 | -- | - |
testcase_18 | -- | - |
testcase_19 | -- | - |
testcase_20 | -- | - |
testcase_21 | -- | - |
testcase_22 | -- | - |
testcase_23 | -- | - |
testcase_24 | -- | - |
testcase_25 | -- | - |
testcase_26 | -- | - |
testcase_27 | -- | - |
testcase_28 | -- | - |
testcase_29 | -- | - |
testcase_30 | -- | - |
testcase_31 | -- | - |
testcase_32 | -- | - |
testcase_33 | -- | - |
testcase_34 | -- | - |
testcase_35 | -- | - |
コンパイルメッセージ
main.c:15:1: warning: data definition has no type or storage class 15 | ops[101010]; | ^~~ main.c:15:1: warning: type defaults to 'int' in declaration of 'ops' [-Wimplicit-int] main.c:114:1: warning: return type defaults to 'int' [-Wimplicit-int] 114 | mtoa(j,i){ | ^~~~ main.c: In function 'mtoa': main.c:114:1: warning: type of 'j' defaults to 'int' [-Wimplicit-int] main.c:114:1: warning: type of 'i' defaults to 'int' [-Wimplicit-int] main.c: At top level: main.c:155:1: warning: return type defaults to 'int' [-Wimplicit-int] 155 | atom_i(i){ | ^~~~~~ main.c: In function 'atom_i': main.c:155:1: warning: type of 'i' defaults to 'int' [-Wimplicit-int] main.c: At top level: main.c:215:1: warning: return type defaults to 'int' [-Wimplicit-int] 215 | main(n,q,i,c,d,t,x,y){ | ^~~~ main.c: In function 'main': main.c:215:1: warning: type of 'n' defaults to 'int' [-Wimplicit-int] main.c:215:1: warning: type of 'q' defaults to 'int' [-Wimplicit-int] main.c:215:1: warning: type of 'i' defaults to 'int' [-Wimplicit-int] main.c:215:1: warning: type of 'c' defaults to 'int' [-Wimplicit-int] main.c:215:1: warning: type of 'd' defaults to 'int' [-Wimplicit-int] main.c:215:1: warning: type of 't' defaults to 'int' [-Wimplicit-int] main.c:215:1: warning: type of 'x' defaults to 'int' [-Wimplicit-int] main.c:215:1: warning: type of 'y' defaults to 'int' [-Wimplicit-int] main.c:218:9: warning: implicit declaration of function 'scanf' [-Wimplicit-function-declaration] 218 | scanf("%d",&n); | ^~~~~ main.c:1:1: note: include '<stdio.h>' or provide a declaration of 'scanf' +++ |+#include <stdio.h> 1 | #define M 1000000007 main.c:218:9: warning: incompatible implicit declaration of built-in function 'scanf' [-Wbuiltin-declaration-mismatch] 218 | scanf("%d",&n); | ^~~~~ main.c:218:9: note: include '<stdio.h>' or provide a declaration of 'scanf' main.c:261:25: warning: implicit declaration of function 'print
ソースコード
#define M 1000000007 typedef struct{ int val; int type; int range_l; int range_r; int child_l; int child_r; int nc; } N; N ns[101010]; int nn; ops[101010]; int insadd(int i,int d){ N*p=ns+i; if(p->type=='a'){ if(ns[p->child_l].nc>ns[p->child_r].nc){ p->child_r=insadd(p->child_r,d); p->range_r++; p->nc=ns[p->child_l].nc+ns[p->child_r].nc+2; p->val=(ns[p->child_l].val+ns[p->child_r].val)%M; return i; } } { N*pl=ns+nn++; pl->type='l'; pl->val=d; pl->range_l=p->range_r; pl->range_r=p->range_r+1; pl->nc=0; N*pm=ns+nn++; pm->type='a'; pm->child_l=i; pm->child_r=nn-2; pm->range_l=p->range_l; pm->range_r=p->range_r+1; pm->nc=p->nc+2; pm->val=(p->val+d)%M; return nn-1; } } int insmul(int i,int d){ N*p=ns+i; if(p->type=='a'){ p->child_r=insmul(p->child_r,d); p->range_r++; p->nc=ns[p->child_l].nc+ns[p->child_r].nc+2; p->val=(ns[p->child_l].val+ns[p->child_r].val)%M; return i; } if(p->type=='m'){ if(ns[p->child_l].nc>ns[p->child_r].nc){ p->child_r=insmul(p->child_r,d); p->range_r++; p->nc++; p->val=1ll*ns[p->child_l].val*ns[p->child_r].val%M; return i; } } { N*pl=ns+nn++; pl->type='l'; pl->val=d; pl->range_l=p->range_r; pl->range_r=p->range_r+1; pl->nc=0; N*pm=ns+nn++; pm->type='m'; pm->child_l=i; pm->child_r=nn-2; pm->range_l=p->range_l; pm->range_r=p->range_r+1; pm->nc=p->nc+2; pm->val=1ll*p->val*d%M; return nn-1; } } int getv(int j,int i){ N*p; while(p=ns+i,p->type!='l'){ if(j<ns[p->child_l].range_r){ i=p->child_l; }else{ i=p->child_r; } } return p->val; } void setv(int j,int d,int i){ N*p=ns+i; if(p->type=='l'){ p->val=d; }else{ if(j<ns[p->child_l].range_r){ setv(j,d,p->child_l); }else{ setv(j,d,p->child_r); } if(p->type=='m'){ p->val=1ll*ns[p->child_l].val*ns[p->child_r].val%M; }else{ p->val=(ns[p->child_l].val+ns[p->child_r].val)%M; } } } mtoa(j,i){ N*p=ns+i; if(ns[p->child_l].range_r>j){ p->child_l=mtoa(j,p->child_l); if(p->type=='m'&&ns[p->child_l].type=='a'){ int ia=p->child_l; N*pa=ns+ia; p->child_l=pa->child_r; p->range_l=ns[p->child_l].range_l; p->val=1ll*ns[p->child_l].val*ns[p->child_r].val%M; pa->child_r=i; pa->range_r=p->range_r; pa->val=(ns[pa->child_l].val+p->val)%M; return ia; }else{ p->val=1ll*ns[p->child_l].val*ns[p->child_r].val%M; return i; } } if(ns[p->child_r].range_l<j){ p->child_r=mtoa(j,p->child_r); if(p->type=='m'&&ns[p->child_r].type=='a'){ int ia=p->child_r; N*pa=ns+ia; p->child_r=pa->child_l; p->range_r=ns[p->child_r].range_r; p->val=1ll*ns[p->child_l].val*ns[p->child_r].val%M; pa->child_l=i; pa->range_l=p->range_l; pa->val=(p->val+ns[ns[ia].child_r].val)%M; return ia; }else{ p->val=1ll*ns[p->child_l].val*ns[p->child_r].val%M; return i; } } p->type='a'; p->val=(ns[p->child_l].val+ns[p->child_r].val)%M; return i; } atom_i(i){ N*p=ns+i; if(ns[p->child_l].type=='a'&&(ns[p->child_r].type!='a'||ns[p->child_l].nc<=ns[p->child_r].nc)){ int ia=p->child_l; N*pa=ns+ia; p->child_l=pa->child_r; p->range_l=ns[p->child_l].range_l; pa->child_r=atom_i(i); pa->range_r=ns[p->child_r].range_r; pa->val=(ns[pa->child_l].val+ns[pa->child_r].val)%M; return ia; } if(ns[p->child_r].type=='a'){ int ia=p->child_r; N*pa=ns+ia; p->child_r=pa->child_l; p->range_r=ns[p->child_r].range_r; pa->child_l=atom_i(i); pa->range_l=ns[pa->child_l].range_l; pa->val=(ns[pa->child_l].val+ns[pa->child_r].val)%M; return ia; } p->val=1ll*ns[p->child_l].val*ns[p->child_r].val%M; return i; } int atom(int j,int i){ N*p=ns+i; if(ns[p->child_l].range_r>j){ p->child_l=atom(j,p->child_l); p->val=(ns[p->child_l].val+ns[p->child_r].val)%M; return i; } if(ns[p->child_r].range_l<j){ p->child_r=atom(j,p->child_r); p->val=(ns[p->child_l].val+ns[p->child_r].val)%M; return i; } p->type='m'; return atom_i(i); } int f(int l,int r,int i){ N*p=ns+i; if(l<=p->range_l&&r>=p->range_r){ return p->val; } if(r<=ns[p->child_l].range_r){ return f(l,r,p->child_l); } if(l>=ns[p->child_r].range_l){ return f(l,r,p->child_r); } { int vl=f(l,r,p->child_l); int vr=f(l,r,p->child_r); return p->type=='m' ? 1ll*vl*vr%M : (vl+vr)%M; } } main(n,q,i,c,d,t,x,y){ int root=0; scanf("%d",&n); scanf("%d",&d); { N*p=ns+nn++; p->val=d; p->type='l'; p->range_l=0; p->range_r=1; p->child_l=0; p->child_r=0; p->nc=0; } for(i=1;i<n;i+=2){ c=0; scanf(" %s%d",&c,&d); if(c=='*'){ root=insmul(root,d); }else{ root=insadd(root,d); } ops[i+1]=c; } scanf("%d",&q); for(i=0;i<q;++i){ t=0; scanf(" %s%d%d",&t,&x,&y); if(t=='!'){ if(x%2){ // digit int d1=getv(x/2,root); int d2=getv(y/2,root); setv(x/2,d2,root); setv(y/2,d1,root); }else{ // op if(ops[x]!=ops[y]){ if(ops[y]=='*')t=x;x=y;y=t; root=mtoa(x/2,root); ops[x]='*'; root=atom(y/2,root); ops[y]='+'; } } }else{ printf("%d\n",f(x/2,y/2+1,root)); } } }