计蒜客斑点蛇

Posted kyledeng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计蒜客斑点蛇相关的知识,希望对你有一定的参考价值。

技术分享图片

技术分享图片

技术分享图片

  解析

  线段树点操作版题,注意范围判断。

  代码

  

#include<bits/stdc++.h>
#define MAXN 50004
using namespace std;

int s_tree[4*MAXN];
int n;

void up(int p)
{
    s_tree[p]=s_tree[p*2]+s_tree[p*2+1];
}

void modify(int p,int l,int r,int x,int v,int flag)
{
    if(l==r)
    {
        if(flag==1)
        {
            s_tree[p]+=v;
            return;
        }
        else 
        {
            s_tree[p]-=v;
            return;
        }
    }
    int mid=(l+r)/2;
    if(x<=mid) modify(p*2,l,mid,x,v,flag);
    else modify(p*2+1,mid+1,r,x,v,flag);
    up(p);
}

int query(int p,int l,int r,int x,int y)
{
    if(x<=l&&r<=y)//范围判断
    {
        return s_tree[p];
    }
    int res=0;
    int mid=(l+r)/2;
    if(x<=mid) res+=query(p*2,l,mid,x,y);
    if(y>mid) res+=query(p*2+1,mid+1,r,x,y);
    return res;
}

int main()
{
    int n;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        int a;
        cin>>a;
        modify(1,1,n,i,a,1);
    }
    string st;
    int sa,sb;
    while(cin>>st)
    {
        if(st=="End") break;
        cin>>sa>>sb;
        if(st=="Query")
        {
            cout<<query(1,1,n,sa,sb)<<endl;
        }
        else if(st=="Add") 
        {
            modify(1,1,n,sa,sb,1);
        }
        else if(st=="Sub")
        {
            modify(1,1,n,sa,sb,0);
        }
    }
    return 0;
}

 



以上是关于计蒜客斑点蛇的主要内容,如果未能解决你的问题,请参考以下文章

计蒜客练习题:素数距离

计蒜客--八皇后问题

计蒜客之判断质数

计蒜客课程竞赛入门--统计三角形 代码流程摘记

计蒜客--网页跳转问题

计蒜客--蒜头君开公司