QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#788461 | #9543. Good Partitions | huan_yp# | RE | 1ms | 3896kb | C++20 | 1.6kb | 2024-11-27 17:02:09 | 2024-11-27 17:02:09 |
Judging History
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 ...