码迷,mamicode.com
首页 > 其他好文 > 详细

计蒜客斑点蛇

时间:2018-07-25 15:12:47      阅读:183      评论:0      收藏:0      [点我收藏+]

标签:int   class   span   分享图片   string   技术   http   src   分享   

技术分享图片

技术分享图片

技术分享图片

  解析

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

  代码

  

#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;
}

 

计蒜客斑点蛇

标签:int   class   span   分享图片   string   技术   http   src   分享   

原文地址:https://www.cnblogs.com/KyleDeng/p/9365906.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!