绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
请问我的CH4301有什么问题?
2019-09-04 13:47:03

答案错误,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 (ll x,ll y)
{
    if ((!x)||(!y)) return x^y;
    return y==0?x:(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]=(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]=(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((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((a[L]+query(L),ask(L+1,R,1,n,1))));
    }
    return 0;
}


分享好友

分享这个小栈给你的朋友们,一起进步吧。

应用开发
创建时间:2020-06-17 15:31:04
应用软件开发是指使用程序语言C#、java、 c++、vb等语言编写,主要是用于商业、生活应用的软件的开发。
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

技术专家

查看更多
  • 栈栈
    专家
戳我,来吐槽~