杭电 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;
}


 

 

【杭电oj1166】敌兵布阵

敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi...
  • better_space
  • better_space
  • 2016年08月16日 21:04
  • 255

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

敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi...
  • z8110
  • z8110
  • 2015年08月20日 20:34
  • 588

HDOJ 1166(数组保存线段树)

C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了。A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况。由于...
  • u013555159
  • u013555159
  • 2016年08月04日 14:14
  • 208

杭电 HDU ACM 1166 敌兵布阵(树状数组)

敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub...
  • lsgqjh
  • lsgqjh
  • 2015年06月27日 21:46
  • 696

hdu1166 敌兵布阵 线段树 点更新

链接:点击打开链接 Input 第一行一个整数T,表示有T组数据。 每组数据第一行一个正整数N(N 接下来每行有一条命令,命令有4种形式: (1) Add i j,i和j为正整数,表示第i个营地增...
  • migu77777
  • migu77777
  • 2016年08月18日 23:29
  • 470

杭电1166

#include #include using namespace std; const int maxn=50005; int sum[4*maxn]; int a[maxn]; ...
  • u010195743
  • u010195743
  • 2013年05月18日 17:06
  • 458

MySQL数据库-错误1166 Incorrect column name

MySQL数据库-错误1166 Incorrect column name 出现MySQL数据库-错误1166 Incorrect column name 字段名,这个是字段中有空格了,这个只要利用...
  • zhupengqq
  • zhupengqq
  • 2017年09月19日 19:44
  • 330

POJ 1166 The Clocks

高斯消元第四题,这次的题很精彩~~ 题目大意: 给出9个钟表的状态,给出九种操作,问最少要操作几次能把所有的钟表调回12点。 解题思路: 对于9个钟表分别列方程,然后高斯消元即...
  • lin375691011
  • lin375691011
  • 2014年08月07日 09:47
  • 6986

【杭电】[1166]敌兵布阵

线段数组的应用 很神奇的一个算法应用于单点修改和区间求和 先记住吧……...
  • u011493189
  • u011493189
  • 2016年04月01日 23:22
  • 140

线段树入门 杭电 1166

多说几句话,省的摘要里都是没格式的代码。。。 线段树的单点更新。 模板题。 重新整理了一下 0.0...
  • u014410316
  • u014410316
  • 2014年05月02日 10:17
  • 579
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:杭电 1166
举报原因:
原因补充:

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