zoukankan      html  css  js  c++  java
  • hdu 1166 线段树 水题 地兵布阵

    越来越感觉算法就是一种方法,一个解决一类问题的公式,当然公式有变形,题也有变形

    但只要深刻理解它,变形只是一种顺理而成,只要类比公式,推理一下,将代码变形一下

    #include <stdio.h>
    #include <string.h>
    
    #define MAX 50005
    
    struct trea
    {
    	int l,r;
    	int summ;
    }trees[MAX*3];
    
    
    int num[MAX],n,t;
    
    void biuld(int i,int l,int r)
    {
    	trees[i].l=l;
    	trees[i].r=r;
    	if(l==r)
    	{
    		trees[i].summ=num[l-1];
    		return ;
    	}
    	int mid=(l+r)/2;
    	biuld(i*2,l,mid);
    	biuld(i*2+1,mid+1,r);
    	trees[i].summ=trees[i*2].summ+trees[i*2+1].summ;
    }
    
    void add(int i,int l,int m)
    {
    	trees[i].summ+=m;
    
    	if(trees[i].l==l&&trees[i].r==l)return ;
    
    	int mid=(trees[i].l+trees[i].r)/2;
    
    	if(l<=mid) add(i*2,l,m);
    	else add(i*2+1,l,m);
    }
    
    int query(int i,int l,int r)
    {
    	if(trees[i].l==l&&trees[i].r==r)
    		return trees[i].summ;
    	else
    	{
    		int mid=(trees[i].l+trees[i].r)/2;
    
    		if(l>mid)return query(i*2+1,l,r);
    		else if(r<=mid)return query(i*2,l,r);
    		else return query(i*2,l,mid)+query(i*2+1,mid+1,r);
    	}
    }
    
    
    int main()
    {
    	char str[10];
    
    	int k=0,i;
    
    	int a,b;
    
    	scanf("%d",&t);
    
    	while(t--)
    	{
    		scanf("%d",&n);
    
    		for(i=0;i<n;i++)scanf("%d",&num[i]);
    
    		//for(i=0;i<n;i++)printf("%d\n",num[i]);
    
    		biuld(1,1,n);
    
    		printf("Case %d:\n",++k);
    
    		while(scanf("%s",str))
    		{
    			if(strcmp(str,"End")==0)
    				break;
    			scanf("%d%d",&a,&b);
    			if(strcmp(str,"Add")==0)add(1,a,b);
    			else if(strcmp(str,"Sub")==0)add(1,a,-b);
    			else
    			{
    				printf("%d\n",query(1,a,b));
    			}
    		}
    	}
    
    	return 0;
    }
    

      

    就行

  • 相关阅读:
    程序包管理
    磁盘篇
    centos7上常用软件安装
    这个端午
    字节码技术及动态代理
    浅析同步异步阻塞非阻塞
    String拾遗
    Java注解拾遗
    设计模式之总结篇
    设计模式之访问者模式
  • 原文地址:https://www.cnblogs.com/jackes/p/2429218.html
Copyright © 2011-2022 走看看