杭电 1166

原创 2012年03月27日 13:13:08

最近搞算法,唉,一个人慢慢的弄,有时候看了一天都不知道怎么回事

没有人带领就是没办法 啊

悲剧········

1166  弄了半天

终于弄出来了

有一个在scanf("%s",str);前面加了一个getchar()

能够正常现实,但是就是wrong

最后查出来了

坑爹··········

 

杭电 1166

是线段树算法

 

 

#include "stdio.h"

struct node 
{
	int l,r,sum;
}no[3*50005];

int ks[50005];

int t1,t2;

void build_tree(int a,int b,int c)
{
	no[c].l = a ; 
	no[c].r = b ;
	if (a == b)
	{
		no[c].sum = ks[a];
		return ;
	}
	int mid =(a + b) >> 1 ;
	build_tree(a , mid , 2*c);
	build_tree(mid+1 , b , 2*c+1);
	no[c].sum = no[2*c].sum + no[2*c+1].sum;
}

void add_sub(int a,int b,int c)
{
	if (a == b )
	{
		no[c].sum += t2;
		return ;
	}

	int mid = (a + b ) >> 1;
	if (t1 <= mid )
	{
		add_sub(a , mid , 2*c );
	}
	else
		add_sub(mid +1 , b , 2*c+1 );
	no[c].sum = no[2*c].sum + no[2*c+1].sum ;
}

int find_tree(int a, int b,int c)
{
	if ((no[c].l == a )&& (no[c].r == b ))
	{
		return no[c].sum;
	}
	int mid = (no[c].l + no[c].r) >> 1 ;

	if (b <= mid)
	{
		find_tree(a , b , 2*c);
	}
	else
		if (a > mid)
		{
			find_tree(a , b , 2*c+1);
		}
		else
			return (find_tree(a, mid , 2*c) + find_tree(mid+1 , b , 2*c+1) );
}


int main(int argc, char* argv[])
{
	int n,index,cases = 0 ;
	char str[10];
	scanf("%d",&index);
	while (index--)
	{
		cases++;
		scanf("%d",&n);
		for (int i =1 ; i <= n ; ++i )
		{
			scanf("%d",&ks[i]);
		}
		build_tree(1 , n , 1 );
		printf("Case %d:\n",cases);
		while (scanf("%s",str))
		{
			if (str[0] == 'A')
			{
				scanf("%d%d",&t1,&t2);
				add_sub(1, n , 1 );
			}
			else
				if (str[0] == 'S')
				{
					scanf("%d%d",&t1,&t2);
					t2 = 0 - t2 ;
					add_sub(1, n, 1);
				}
				else
					if (str[0] == 'Q')
					{
						scanf("%d%d",&t1,&t2);
						printf("%d\n",find_tree(t1 , t2 ,1));
					}
					else
						break;
		}
	}
	return 0;
}


 

 

线段树的总结与习题acm杭电HDU1166

线段树可以快速对一组数列进行操作,区间求和,区间最值等。 线段树,类似区间树,它在各个节点保存一条线段(数组中的一段子数组),主要用于高效解决连续区间的动态查询问题,由于二叉结构的特性,它基本能保...

杭电acm 1166敌兵布阵(数状数组)

敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub...

【杭电oj1166】敌兵布阵

敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi...

杭电 1166 敌兵布阵

Problem Description C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了。A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的...
  • TXT003
  • TXT003
  • 2015年11月01日 14:59
  • 207

【线段树 + 简单题】杭电 hdu 1166 敌兵布阵

/* THE PROGRAM IS MADE BY PYY */ /*-----------------------------------------------------------------...

杭电ACM1166——敌兵布阵~~线段树

这一题,暴力的方法超时。只能用线段树来求解。 对于线段树,只是初学,还不是很懂,看了大神的博客,慢慢敲出来的。 关键还是那些递归的过程。递归的过程,也是理解了大概,也很难讲清楚递归的过程。 下面...

杭电 HDU ACM 1166 敌兵布阵(线段树)

敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi...
  • lsgqjh
  • lsgqjh
  • 2015年06月30日 13:47
  • 492

线段树入门 杭电 1166

多说几句话,省的摘要里都是没格式的代码。。。 线段树的单点更新。 模板题。 重新整理了一下 0.0...

杭电(hdu)ACM 1166 敌兵布阵

敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi...

杭电1166敌兵布阵(线段树)

敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi...
  • z8110
  • z8110
  • 2015年08月20日 20:34
  • 554
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:杭电 1166
举报原因:
原因补充:

(最多只允许输入30个字)