QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#456840#1060. 快速查询rzh123100 ✓288ms47912kbC++202.7kb2024-06-28 15:24:152024-06-28 15:24:16

Judging History

This is the latest submission verdict.

  • [2024-06-28 15:24:16]
  • Judged
  • Verdict: 100
  • Time: 288ms
  • Memory: 47912kb
  • [2024-06-28 15:24:15]
  • Submitted

answer

#include <bits/stdc++.h>
using namespace std;
constexpr int P=1e7+19,Q=1e5+5,T=105;
int n,q,tt,sum,gk,gb,ans,inv[P+5];
struct Op{
    int t,x,y;
}op[Q];
struct Rep{
    int a,b;
}re[T];
int idc{0},tim{0};
pair<int,int> v[Q];
map<int,int> id;
inline void out(int vv){
    // printf("%d\n",vv);
    ans=(ans+vv)%P;
}
int query(int x){
    if(v[x].second<v[0].second){
        v[x]=v[0];
    }
    int t=(1ll*v[x].first*gk+gb)%P;
    // printf("query %d = %d (v=%d)\n",x,t,v[x].first);
    return t;
}
void doop(int id){
    // printf("%d\n",id);
    // return;
    ++tim;
    int t=op[id].t,x=op[id].x,y=op[id].y;
    // printf("op %d %d %d\n",t,x,y);
    // printf("k=%d b=%d\n",gk,gb);
    if(t==3&&y==0) t=4;
    switch(t){
        case 1:{
            // k*X+b=y,X=(y-b)/k
            // assert(gk!=0);
            sum=(sum-query(x)+P)%P;
            sum=(sum+y)%P;
            int vv=1ll*((y-gb+P)%P)*inv[gk]%P;
            v[x]={vv,tim};
            // assert(query(x)==y);
            break;
        }
        case 2:{
            gb=(gb+y)%P;
            sum=(sum+1ll*y*n)%P;
            break;
        }
        case 3:{
            gk=1ll*gk*y%P;
            gb=1ll*gb*y%P;
            sum=1ll*sum*y%P;
            break;
        }
        case 4:{
            v[0]={y,tim};
            gk=1,gb=0;
            sum=1ll*y*n%P;
            break;
        }
        case 5:{
            out(query(x));
            break;
        }
        case 6:{
            out(sum);
            break;
        }
    }
}
void init(){
    inv[1]=1;
    for(int i{2};i<P;++i){
        inv[i]=1ll*(P-P/i+P)%P*inv[P%i]%P;
        // assert(1ll*i*inv[i]%P==1);
    }

    for(int i{1};i<=q;++i){
        if(op[i].t==1){
            if(id.find(op[i].x)==id.end()) id.emplace(op[i].x,++idc);
            op[i].x=id[op[i].x];
        }
    }
    for(int i{1};i<=q;++i){
        if(op[i].t==5){
            if(id.find(op[i].x)!=id.end()) op[i].x=id[op[i].x];
            else op[i].x=0;
        }
    }
    // fprintf(stderr,"idc=%d\n",idc);
}
int main(){
    scanf("%d%d",&n,&q);
    for(int i{1};i<=q;++i){
        int t,x{0},y{0};
        scanf("%d",&t);
        if(t==1||t==5) scanf("%d",&x);
        if(t<=4) scanf("%d",&y);
        y=(y%P+P)%P;
        op[i]={t,x,y};
    }
    scanf("%d",&tt);
    for(int i{1};i<=tt;++i){
        int a,b;
        scanf("%d%d",&a,&b);
        a=(a%q+q)%q;
        b=(b%q+q)%q;
        re[i]={a,b};
    }
    sum=0;
    for(int i{0};i<=idc;++i){
        v[i]={0,0};
    }
    gk=1,gb=0,tim=0;
    init();
    for(int i{1};i<=tt;++i)
        for(int j{1};j<=q;++j)
            doop((re[i].a+1ll*j*re[i].b)%q+1);
    printf("%d\n",ans);
    return 0;
}

詳細信息

Subtask #1:

score: 50
Accepted

Test #1:

score: 50
Accepted
time: 81ms
memory: 47428kb

input:

452026
95958
1 285703 217433997
1 11660 355946119
1 154677 958212086
1 45777 559001183
1 149425 708949937
1 199039 -627813211
1 421465 878181683
1 18566 -840518154
1 268546 -956473636
1 6627 -168874651
1 165349 796846652
1 389787 -241387034
2 856579071
2 776291767
1 361873 220652502
1 34945 3586417
...

output:

7032812

result:

ok single line: '7032812'

Test #2:

score: 0
Accepted
time: 84ms
memory: 47356kb

input:

483072
93455
3 127269075
1 302644 -819206705
1 324283 176567456
1 362914 -123696183
1 269012 35941289
1 320675 371602507
2 621029853
1 261791 42607160
1 134081 -311548238
1 39566 -639742963
1 148195 248115767
2 698644799
1 14757 -854683791
3 568083880
4 -307679829
1 81614 58671469
4 -123658687
1 263...

output:

4330039

result:

ok single line: '4330039'

Test #3:

score: 0
Accepted
time: 95ms
memory: 47832kb

input:

451320
98796
1 273886 584382657
1 72767 882120348
2 -500581825
1 371431 -890794733
1 388789 575894740
1 416938 55821666
4 -139712863
1 391097 644330384
2 -469419669
1 448782 107966848
1 235509 -986289
3 -858374275
1 123585 -837984190
2 929586510
6
1 401033 363310883
1 331019 468451209
1 96904 -12761...

output:

2444116

result:

ok single line: '2444116'

Test #4:

score: 0
Accepted
time: 90ms
memory: 47472kb

input:

482366
98045
1 24349 377283548
1 453704 -854792539
6
1 237007 242624318
1 88252 393839755
6
1 228412 125093668
1 181999 240899085
4 -558162897
1 206599 674854997
1 277268 -501664106
4 -725152265
1 108652 -772913438
1 314782 64055034
1 188046 -600981194
1 351594 751311220
1 27428 454875485
1 435918 -...

output:

1089463

result:

ok single line: '1089463'

Test #5:

score: 0
Accepted
time: 89ms
memory: 47620kb

input:

482013
91226
4 725259386
1 43639 194616618
4 -37234157
1 133414 -574368751
1 86430 -490776890
1 41779 -149936319
1 155135 -789189968
1 23506 90866624
1 173870 866781461
1 357433 -571999918
1 87765 -307392425
5 175104
1 230280 -534700699
1 246779 348430587
4 614286356
1 455152 -217613300
1 91751 6252...

output:

2809378

result:

ok single line: '2809378'

Subtask #2:

score: 50
Accepted

Dependency #1:

100%
Accepted

Test #6:

score: 50
Accepted
time: 288ms
memory: 47772kb

input:

932633695
99894
1 817597654 58755520
1 830426120 -575569935
1 219698976 11255802
6
1 879216899 -243126660
4 778062635
1 614037672 -8450346
1 867388106 702693200
1 383979273 190017535
6
1 31373926 826414468
1 498056404 219646389
4 -534017693
1 364133037 733160350
2 -117264984
2 768406768
6
1 16132616...

output:

6837626

result:

ok single line: '6837626'

Test #7:

score: 0
Accepted
time: 274ms
memory: 47564kb

input:

957779956
94827
3 601355317
1 45079147 38155506
1 231631228 -362057428
6
2 -283829750
6
1 577666590 -691353274
1 205440460 -667647306
1 949397227 -3792339
1 653527564 828820694
1 491521243 915189166
3 -230329676
1 268381062 597296274
4 12779460
1 599484650 351024349
1 896651645 722621340
1 134125930...

output:

4070758

result:

ok single line: '4070758'

Test #8:

score: 0
Accepted
time: 279ms
memory: 47528kb

input:

987958964
92325
2 -468910483
6
1 510389535 900881564
4 -943881278
1 120113253 5273740
1 401108682 -866524220
1 108908755 -622968084
1 690649880 -664653909
6
1 406048569 930927819
5 688114677
4 -245255661
5 105555975
1 353750321 -466163361
5 927730102
6
5 534739635
5 444272952
1 66866280 470469397
1 ...

output:

7152858

result:

ok single line: '7152858'

Test #9:

score: 0
Accepted
time: 277ms
memory: 47912kb

input:

913105224
97665
1 588154473 218605071
1 628019257 213691408
6
2 678329170
2 -538647151
1 545477538 -779883649
1 799854288 -111616832
1 26866293 32675018
2 -340866521
1 124213553 384460066
1 775180734 414347048
2 123715231
1 628324808 -102971256
1 214563428 8068862
1 402502072 -706040775
1 659051837 ...

output:

9405271

result:

ok single line: '9405271'

Test #10:

score: 0
Accepted
time: 272ms
memory: 47704kb

input:

943284232
95163
4 -852531875
1 201974707 -653053877
1 823113651 196429318
3 337869540
1 647936647 114651757
1 593910554 120551408
1 315182996 -77867126
1 812178266 287556917
1 697126470 302117687
1 156012320 687964917
1 670615234 784564862
1 361379363 510732694
3 676262960
1 770979443 -642438266
1 1...

output:

1705627

result:

ok single line: '1705627'