zoukankan      html  css  js  c++  java
  • hdu1166 敌兵布阵 线段树

    TLE求错误啊啊啊啊啊啊啊

    #include <iostream>
    #include <cstdio>
    #include <fstream>
    #include <cmath>
    #include <cstring>
    
    using namespace std;
    
    #define MAXN 50010
    
    int ai[MAXN];
    int N;
    int T;
    
    struct node
    {
        int left;
        int right;
        int sum;
    }Tree[MAXN<<2];
    
    void PushUp(int root)
    {
        Tree[root].sum = Tree[root<<1].sum + Tree[(root<<1)+1].sum;
    }
    
    void Build(int start,int end,int root)
    {
        Tree[root].left = start;
        Tree[root].right = end;
        int mid = (start + end)>>1;
        if(start == end)
        {
            Tree[root].sum = ai[start];
            return;
        }
        Tree[root].left = start;
        Tree[root].right = end;
        Build(start,mid,root*2);
        Build(mid+1,end,root*2+1);
        PushUp(root);
        //Tree[root].sum = Tree[root<<1].sum + Tree[(root<<1)+1].sum;
    }
    
    int Query(int start,int end,int root)
    {
        if(start > Tree[root].right || end < Tree[root].left)
            return 0;
        if(start<= Tree[root].left && Tree[root].right <= end)
            return Tree[root].sum;
        int mid = (start + end)>>1;
        int a = Query(start,end,root<<1);
        int b = Query(start,end,(root<<1)+1);
        return a+b;
    }
    
    void Update(int root,int pos,int value,int start,int end,int type)
    {
        if(start == end)
        {
            if(type == 1)
                Tree[root].sum += value;
            if(type == 2)
                Tree[root].sum -= value;
            return;
        }
        int mid = (start + end)>>1;
        if(pos <= mid)
            Update(root<<1,pos,value,start,mid,type);
        else
            Update((root<<1)+1,pos,value,mid+1,end,type);
        PushUp(root);
    }
    
    
        
    int main()
    {
        freopen("in.txt","r",stdin);
        freopen("out.txt","w",stdout);
        scanf("%d",&T);
        int count = 0;
        while(T--)
        {
            memset(ai,0,sizeof(ai));
            memset(Tree,0,sizeof(Tree));
            count++;
            scanf("%d",&N);
            for(int i = 1; i <= N; i++)
            {
                scanf("%d",&ai[i]);
            }
            Build(1,N,1);
            cout<<"Case "<<count<<":"<<endl;
            char oper[11];
            int i,j;
            while(scanf("%s",oper))
            {
                if(strcmp(oper,"End")==0)
                    break;
                cin>>i>>j;
                if(strcmp(oper,"Query")==0)
                    cout<<Query(i,j,1)<<endl;
                if(strcmp(oper,"Add")==0)
                {
                    ai[i] += j;
                    Update(1,i,j,1,N,1);
                }
                if(strcmp(oper,"Sub")==0)
                {
                    ai[i] -= j;
                    Update(1,i,j,1,N,2);
                }
            }
        }
        return 0;
    }
    


  • 相关阅读:
    查windows系统开关机记录
    HDU-6278-Jsut$h$-index(主席树)
    POJ-2104-Kth Number(主席树)
    HDU-6546-Function(贪心)
    POJ-1523-SPF(求割点)
    POJ-2762-Going from u to v or from v to u(强连通, 拓扑排序)
    POJ-2552-The Bottom of a Graph 强连通分量
    POJ-1659-Frogs' Neighborhood
    POJ-1904-King‘s Quest
    POJ-1236-Network of Schools
  • 原文地址:https://www.cnblogs.com/pangblog/p/3243834.html
Copyright © 2011-2022 走看看