QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#745798 | #9543. Good Partitions | P3KO | WA | 226ms | 15364kb | C++17 | 1.9kb | 2024-11-14 11:41:59 | 2024-11-14 11:42:00 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
const int MAXN=2e5+5;
typedef long long ll;
ll n,q,a[MAXN],d[MAXN];
int prime[MAXN],num[MAXN],v[MAXN],cnt;
void getfac(int x){
num[0]=x,num[1]=1;
for(int i=2;i<=n;i++){
if(!v[i]){
prime[++cnt]=i,num[i]=2,v[i]=1;
}
for(int j=1;j<=cnt&&prime[j]*i<=n;j++){
if(i%prime[j]==0){
v[i*prime[j]]=v[i]+1;
num[i*prime[j]]=num[i]/(v[i]+1)*(v[i*prime[j]]+1);
break;
}else{
v[i*prime[j]]=1;
num[i*prime[j]]=d[i]*2;
}
}
}
}
ll gcd(ll x,ll y){
return y==0?x:gcd(y,x%y);
}
struct seg{
ll g;
}tr[MAXN*4];
void pushup(int p){
tr[p].g=gcd(tr[p<<1].g,tr[p<<1|1].g);
}
void build(int p,int l,int r){
if(l==r){
tr[p]={d[l]};
return;
}
int mid=l+r>>1;
build(p<<1,l,mid);
build(p<<1|1,mid+1,r);
pushup(p);
}
void insert(int p,int l,int r,int tag,ll v){
if(l==r){
tr[p].g=v;
return;
}
int mid=l+r>>1;
if(tag<=mid)insert(p<<1,l,mid,tag,v);
else insert(p<<1|1,mid+1,r,tag,v);
pushup(p);
}
int query(int p,int s,int t,int l,int r){
if(s>=l&&t<=r)return tr[p].g;
int mid=s+t>>1;
ll ans=0;
if(l<=mid)ans=gcd(query(p<<1,s,mid,l,r),ans);
if(r>mid)ans=gcd(query(p<<1|1,mid+1,t,l,r),ans);
return ans;
}
void input(){
cin>>n>>q;
for(int i=1;i<=n;i++)cin>>a[i];
for(int i=0;i<=n;i++)prime[i]=v[i]=num[i]=0;
cnt=0;
}
void solve(){
input();
getfac(n);
if(n==1){
for(int i=0;i<=q;i++)
cout<<1<<"\n";
return;
}
for(int i=1;i<n;i++){
if(a[i+1]<a[i])d[i]=i;
else d[i]=0;
}
n--;
build(1,1,n);
cout<<num[query(1,1,n,1,n)]<<"\n";
for(int i=1;i<=q;i++){
int p,v;cin>>p>>v;
a[p]=v;
if(p>1){
if(a[p]>=a[p-1])insert(1,1,n,p-1,0);
else insert(1,1,n,p-1,p-1);
}
if(p<=n){
if(a[p]<=a[p+1])insert(1,1,n,p,0);
else insert(1,1,n,p,p);
}
cout<<num[query(1,1,n,1,n)]<<"\n";
}
}
int main(){
int t;cin>>t;
while(t--){
solve();
}
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 0ms
memory: 9752kb
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: 0ms
memory: 9816kb
input:
1 1 1 2000000000 1 1999999999
output:
1 1
result:
ok 2 lines
Test #3:
score: -100
Wrong Answer
time: 226ms
memory: 15364kb
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:
0 200000 0 200000 0 200000 0 200000 0 200000 0 200000 0 200000 0 200000 0 200000 0 200000 0 200000 0 200000 0 200000 0 200000 0 200000 0 200000 0 200000 0 200000 0 200000 0 200000 0 200000 0 200000 0 200000 0 200000 0 200000 0 200000 0 200000 0 200000 0 200000 0 200000 0 200000 0 200000 0 200000 0 2...
result:
wrong answer 1st lines differ - expected: '160', found: '0'