QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#416516#5308. RPG Pro Leaguegrass8cowTL 151ms9824kbC++172.2kb2024-05-21 22:06:462024-05-21 22:06:46

Judging History

你现在查看的是最新测评结果

  • [2024-05-21 22:06:46]
  • 评测
  • 测评结果:TL
  • 用时:151ms
  • 内存:9824kb
  • [2024-05-21 22:06:46]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
int n;
#define ll long long
#define pi pair<int,int>
#define fi first
#define se second
set<pi>L[16],R[16];
char S[3];
int tx[16];
bool vis[100100];
ll sum;
int pp[16],zd,a[100100],so[101000];
const int I=1e9+7;
void ao(int x,int z){for(int i=0;i<16;i++)if(x&i)tx[i]+=z;}
void tryout(){
    int st=0;
    for(int s=1;s<16;s++)
        if(tx[s]==zd*pp[s])st|=s;
    int mx=-1,s2=-1;
    for(int i=0;i<16;i++)if(!(i&st)&&!L[i].empty()){
        int oo=(*(--L[i].end())).fi;
        if(mx<oo)mx=oo,s2=i;
    }
    st=s2;pi is=*(--L[st].end());
    ao(st,-1);
    sum-=mx,L[st].erase(is),R[st].insert(is),vis[is.se]=0;
}
void tryin(){
    int st=15;
    for(int s=1;s<16;s++)if(tx[s]<zd*pp[s])st&=s;
    int mi=I,s2=-1;
    for(int i=0;i<16;i++)if((i&st)&&!R[i].empty()){
        int oo=(*R[i].begin()).fi;
        if(mi>oo)mi=oo,s2=i;
    }
    st=s2;
    pi is=*R[st].begin();
    ao(st,1);
    sum+=mi,R[st].erase(is),L[st].insert(is),vis[is.se]=1;
}
int gx[101000];
int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        gx[i]=i;
        scanf("%s%d",S,&a[i]);int O=strlen(S),st=0;
        for(int j=0;j<O;j++){
            if(S[j]=='D')st|=9;
            if(S[j]=='S')st|=10;
            if(S[j]=='B')st|=4;
        }
        ao(st,1),so[i]=st;
    }
    zd=n+1;
    for(int s=1;s<16;s++)
        pp[s]=pp[s>>1]+(s&1),zd=min(zd,tx[s]/pp[s]);
    sort(gx+1,gx+n+1,[&](int x,int y){return a[x]<a[y];});
    for(int i=n;i;i--){
        int u=gx[i];
        int st=0;for(int s=1;s<16;s++)if(tx[s]==zd*pp[s])st|=s;
        if(st&so[u])L[so[u]].insert({a[u],u}),sum+=a[u],vis[u]=1;
        else R[so[u]].insert({a[u],u}),ao(so[u],-1);
    }
    int q;scanf("%d",&q);
    for(int i=1,x,z;i<=q;i++){
        scanf("%d%d",&x,&z);
        if(vis[x]){
            sum-=a[x],ao(so[x],-1);
            vis[x]=0,L[so[x]].erase({a[x],x}),a[x]=z,R[so[x]].insert({a[x],x});
            tryin();
        }
        else{
            vis[x]=1,ao(so[x],1);
            R[so[x]].erase({a[x],x}),a[x]=z,L[so[x]].insert({a[x],x}),
            sum+=a[x];
            tryout();
        }
        printf("%lld\n",sum);
    }
    return 0;
}

詳細信息

Test #1:

score: 100
Accepted
time: 0ms
memory: 3780kb

input:

5
BS 3
D 3
B 2
D 4
D 5
2
5 2
1 5

output:

10
12

result:

ok 2 number(s): "10 12"

Test #2:

score: 0
Accepted
time: 146ms
memory: 9820kb

input:

100000
B 727564174
S 231637747
D 246625257
S 975124756
D 844292741
S 809641006
B 396062588
B 883224128
B 311130283
S 434433581
S 509817048
S 993501344
S 508399542
B 279564062
D 950946642
D 819528264
D 412285620
B 968540732
S 953428318
D 902181790
S 172330493
D 725075
B 135580649
D 714478555
B 466916...

output:

40721766963064
40720937650054
40721120372880
40720722768213
40721029809776
40720546822562
40719680807733
40720084910620
40720153432078
40720873952927
40721146683113
40721696875436
40722235723316
40722133896063
40723047443192
40723419347010
40722633976087
40722282806304
40722071958869
40721278798949
...

result:

ok 100000 numbers

Test #3:

score: 0
Accepted
time: 150ms
memory: 9664kb

input:

100000
S 139759881
S 606246897
D 295439937
S 30506154
B 815842927
D 195502949
S 172358189
B 763560428
S 862087943
B 413481091
B 775973599
B 336841814
S 116523655
D 670479401
S 405979654
D 246440323
B 764165518
S 20267667
S 327264314
B 44539411
B 353491632
D 5202858
S 842200033
S 337952200
D 6150168
...

output:

40524529913817
40524860528295
40524824503871
40524293726866
40524353142964
40524176391157
40524132308308
40524134826811
40524107274580
40524341365401
40524194084164
40524572093940
40524910630137
40525296284478
40525633925207
40525793456210
40526041232042
40526041232042
40526144290799
40526737278038
...

result:

ok 100000 numbers

Test #4:

score: 0
Accepted
time: 151ms
memory: 9792kb

input:

100000
B 567185557
S 731841946
S 365565517
D 767568967
B 450159068
D 658059427
S 790559143
B 356623472
S 541664149
D 447906802
B 407933323
S 403512209
D 187294244
D 351683584
S 504286757
D 212023807
B 51119045
S 84059041
S 819097063
D 115224344
B 104478594
B 446088838
D 153595287
S 749172175
S 57160...

output:

40639770818547
40639473223932
40639909468709
40639327970968
40639021798510
40639377404325
40638848317225
40638755074708
40638463360482
40638463360482
40638225443217
40638907566106
40638907566106
40638707391259
40638642781389
40638809562003
40637986313647
40637481713492
40636989271046
40636464147095
...

result:

ok 100000 numbers

Test #5:

score: 0
Accepted
time: 151ms
memory: 9704kb

input:

100000
BS 609181774
BS 498815665
BS 729225393
S 366911976
D 192782776
DB 109052372
D 927091614
SD 120687185
D 619604491
DB 405398892
BS 947957264
DB 134896320
S 909342292
DS 374808683
SD 810910022
D 636083341
D 719767505
D 576713707
DB 327091245
SD 128393617
B 464665485
DB 186653465
S 50744850
BS 31...

output:

49922035989330
49921636770968
49921944461352
49922449756073
49922666981649
49922155391929
49922220626762
49922165472452
49922033364853
49922182879778
49922118499498
49921629498341
49921194947559
49921237943096
49920830551816
49920785993225
49921523763744
49920936362665
49920399195989
49920353383077
...

result:

ok 100000 numbers

Test #6:

score: 0
Accepted
time: 140ms
memory: 9820kb

input:

100000
S 46980313
DS 746577279
S 119614887
D 32418943
B 952739459
S 532231646
SD 559263381
DS 631559122
SB 335561329
SD 935559531
DB 548708848
BD 8298741
DS 403723074
DS 559038896
SB 43327419
SD 430897629
B 483781810
B 31916773
B 39977980
S 405078517
D 323989135
SD 584417860
SB 776661769
D 467791168...

output:

42348275359402
42348652439619
42348713198459
42348631107452
42349074844557
42349760441910
42349962186466
42350429498431
42350447771721
42350361082730
42349972717124
42350266522340
42350463555914
42351167696055
42350739802238
42350725554192
42351107085086
42350772822134
42349881535618
42350109052615
...

result:

ok 100000 numbers

Test #7:

score: 0
Accepted
time: 150ms
memory: 9824kb

input:

100000
BS 213295369
B 455710761
SB 373454236
DB 673322458
S 651168441
BS 359903245
BD 751934633
SD 632609134
S 358152611
S 160649972
D 146822438
B 754830402
B 385092410
B 851559764
DS 481485147
B 224375164
D 961859623
DB 985459185
B 582943091
B 316407251
DS 305843239
DS 723438991
S 53429344
B 523111...

output:

45600208273121
45600317533935
45600175773836
45600173792927
45599452402298
45599812001804
45599878168987
45600637494399
45600782960729
45601107349004
45601024544203
45600077092341
45600360724694
45600356341282
45600663553626
45600478170427
45601258145258
45601572720352
45601860925268
45602282587440
...

result:

ok 100000 numbers

Test #8:

score: 0
Accepted
time: 149ms
memory: 9820kb

input:

100000
S 716049090
D 833450560
SD 670462747
SB 446815258
B 384907056
D 984726104
SB 462243694
D 922590298
BD 759638240
DS 19626890
SB 248370274
SD 668142001
D 335754916
B 726719900
BD 453285618
D 322601083
D 748915428
DB 977946001
BD 918781134
SB 548154938
S 732129575
B 165403934
DB 307460261
B 5705...

output:

49045162855443
49045050545344
49045590587244
49046369263442
49046304995206
49045800881106
49045291887266
49045217335835
49044870222977
49044225198944
49044835834249
49045020093554
49045243504559
49045344873512
49045291814515
49044883632804
49044186683347
49043700349817
49044284292286
49044627186893
...

result:

ok 100000 numbers

Test #9:

score: 0
Accepted
time: 144ms
memory: 9792kb

input:

100000
D 960395655
B 122062291
SB 943474832
S 570975390
B 123731786
S 774351291
SD 856577683
DS 198978387
BS 934036917
BS 91010215
DS 387466221
BD 12179611
BS 860542232
BD 330196269
SB 26230686
S 732137135
D 536823278
DS 596330655
D 526094623
S 676662638
BD 894521450
SD 208119759
S 825586140
DS 7300...

output:

50012421513787
50012188224437
50012089226755
50012449040900
50012737290301
50012412928158
50012451727620
50013117114082
50013616855009
50013660180722
50013565703915
50013578958010
50013544230467
50013431019751
50013791549050
50013557409907
50013800945077
50013305887273
50013458257335
50013127389538
...

result:

ok 100000 numbers

Test #10:

score: -100
Time Limit Exceeded

input:

100000
BD 167885928
B 410609125
B 867926765
D 25698987
B 964971589
DSB 761993255
D 716924891
SDB 449179974
D 655788083
DSB 251063578
BSD 636094691
SBD 269449771
D 416812799
S 196094133
BDS 899848895
BSD 201208478
SDB 654682908
S 210099670
S 459258687
SD 787381819
SDB 75643134
B 794516075
B 341054234...

output:


result: