QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#788461#9543. Good Partitionshuan_yp#RE 1ms3896kbC++201.6kb2024-11-27 17:02:092024-11-27 17:02:09

Judging History

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

  • [2024-11-27 17:02:09]
  • 评测
  • 测评结果:RE
  • 用时:1ms
  • 内存:3896kb
  • [2024-11-27 17:02:09]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
const int M=2e1+5;
struct Solve{
    int a[M<<2], d[M];
    static int gcd(int x, int y){
        return y?gcd(y, x%y):x;
    }
    Solve(){
        for(int i=1;i<M;i++)
        for(int j=i;j<M;j+=i)
            d[j]++;
        
    }
    void push(int rt){
        a[rt]=gcd(a[rt<<1], a[rt<<1|1]);
    }
    void upd(int l, int r, int rt, int x, int y){
        // cerr<<"U:"<<l<<' '<<r<<' '<<rt<<' '<<x<<' '<<y<<'\n';
        if(l==r)return void(a[rt]=y);
        int mid=(l+r)/2;
        if(x<=mid)upd(l, mid, rt<<1, x, y);
        else upd(mid+1, r, rt<<1|1, x, y);
        push(rt);
        // cerr<<l<<' '<<r<<' '<<a[rt];
    }
    void add(int x){
        upd(1, M, 1, x, x);
    }
    void era(int x){
        upd(1, M, 1, x, 0);
    }
    void clear(){
        memset(a, 0, sizeof(a));
    }
    int ck(){
        if(a[1]==0)return -1;
        return d[a[1]];
    }
}Q;
int main(){
    int T,n,q;
    vector<int> a(M+1);
    scanf("%d",&T);
    while(T--){
        scanf("%d%d",&n,&q);
        for(int i=1;i<=n;++i) scanf("%d",&a[i]);
        for(int i=1;i<n;++i) if(a[i]>a[i+1]) Q.add(i);
        printf("%d\n",~Q.ck()?Q.ck():n);
        while(q--){
            int p, v;
            scanf("%d%d",&p,&v);
            if(p!=1&&a[p-1]>a[p]) Q.era(p-1);
            if(p!=n&&a[p]>a[p+1]) Q.era(p);
            a[p]=v;
            if(p!=1&&a[p-1]>a[p]) Q.add(p-1);
            if(p!=n&&a[p]>a[p+1]) Q.add(p);
            printf("%d\n",~Q.ck()?Q.ck():n);
        }
        Q.clear();
    }
    return 0;
}

詳細信息

Test #1:

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

input:

1
5 2
4 3 2 6 1
2 5
3 5

output:

1
2
3

result:

ok 3 lines

Test #2:

score: 0
Accepted
time: 1ms
memory: 3896kb

input:

1
1 1
2000000000
1 1999999999

output:

1
1

result:

ok 2 lines

Test #3:

score: -100
Runtime Error

input:

1
200000 200000
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 ...

output:


result: