首页 新闻 会员 周边 捐助

请问我的CH4301有什么问题?

0
悬赏园豆:30 [已解决问题] 解决于 2019-03-05 13:22

答案错误,0分。蒟蒻嘤嘤嘤

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long ll;
const int Maxn=5e5+2;
int n,m;
ll a[Maxn],b[Maxn],c[Maxn],t[Maxn<<2];
inline ll gcd(ll x,ll y)
{
    if ((!x)||(!y)) return x^y;
    return y==0?x:gcd(y,x%y);
}
void build(int l,int r,int p)
{
    if (l==r)
    {
        t[p]=b[l];
        return;
    }
    int mid=(l+r)>>1,lson=p<<1,rson=p<<1|1;
    build(l,mid,lson);
    build(mid+1,r,rson);
    t[p]=gcd(t[lson],t[rson]);
}
void change(int l,int r,int p,int q,ll d)
{
    if (l==r)
    {
        t[p]+=d;
        return;
    }
    int mid=(l+r)>>1,lson=p<<1,rson=p<<1|1;
    if (q<=mid) change(l,mid,lson,q,d);
    else change(mid+1,r,rson,q,d);
    t[p]=gcd(t[lson],t[rson]);
}
ll ask(int lt,int rt,int l,int r,int p)
{
    if (lt<=l&&r<=rt)
        return abs(t[p]);
    int mid=(l+r)>>1,ansl=0,ansr=0;
    if (lt<=mid) ansl=ask(lt,rt,l,mid,p<<1);
    if (rt>mid) ansr=ask(lt,rt,mid+1,r,p<<1|1);
    return abs(gcd(ansl,ansr));
}
ll query(int x)
{
    ll sum=0;
    for(;x;x-=x&-x) sum+=c[x];
    return sum;
}
void add(int x,ll y)
{
    for(;x<=n;x+=x&-x) c[x]+=y;
}
int main()
{
    char ch[5];int L,R;ll d;
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;++i)
        scanf("%lld",&a[i]),b[i]=a[i]-a[i-1];
    build(1,n,1);
    for(int i=1;i<=m;++i)
    {
        scanf("%s%d%d",ch,&L,&R);
        if (ch[0]=='C')
        {
            scanf("%lld",&d);
            change(1,n,1,L,d);
            add(L,d);
            if (R<n)
                change(1,n,1,R+1,-d),add(R+1,-d);
        }
        else
            printf("%lld\n",abs(gcd(a[L]+query(L),ask(L+1,R,1,n,1))));
    }
    return 0;
}

题目也贴出来我看看。

Shendu.CC 5年前
< >
分享
最佳答案
0

重写一遍就好了。注意n,m不要混

蒟蒻魔芋汤 | 初学一级 |园豆:199 | 2019-03-05 13:22

(手残打错,CH4302)

蒟蒻魔芋汤 | 园豆:199 (初学一级) | 2019-03-05 13:37
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册