暑假集训(2)第四弹 ----- 敌兵布阵(hdu1166)

D - 敌兵布阵

Crawling in process... Crawling failed Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u

Description

Lily 特别喜欢养花,但是由于她的花特别多,所以照料这些花就变得不太容易。她把她的花依次排成一行,每盆花都有一个美观值。如果Lily把某盆花照料的好的话,这盆花的美观值就会上升,如果照料的不好的话,这盆花的美观值就会下降。有时,Lily想知道某段连续的花的美观值之和是多少,但是,Lily的算术不是很好,你能快速地告诉她结果吗?

Input

	第一行一个整数T,表示有T组测试数据。
每组测试数据的第一行为一个正整数N(N<=50000),表示Lily有N盆花。接下来有N个正整数,第i个正整数ai表示第i盆花的初始美观值(1<=ai<=50)。
接下来每行有一条命令,命令有4种形式:
(1)Add i j, i和j为正整数,表示第i盆花被照料的好,美观值增加j(j<=30)
(2)Sub i j, i和j为正整数,表示第i盆花被照料的不好,美观值减少j(j<=30)
(3)Query i j, i和j为正整数,i<=j,表示询问第i盆花到第j盆花的美观值之和
(4)End,表示结束,这条命令在每组数据最后出现
每组数据的命令不超过40000条

Output

	对于第i组数据,首先输出"Case i:"和回车。
对于每个"Query i j"命令,输出第i盆花到第j盆花的美观值之和。

Sample Input

1
9
7 9 8 4 4 5 4 2 7
Query 7 9
Add 4 9
Query 3 6
Sub 9 6
Sub 3 3
Query 1 9
End

Sample Output

Case 1:
13
30
50
 
问题分析:一开始直接两个for循环“企图”暴力穷举,不过TLE当头一棒,后面用树状数组解决此题。

 1 #include "cstdio"
 2 #include "string.h"
 3 int flower[50005];
 4 int n;
 5 void add(int a,int b)
 6 {
 7     while (a <= n)
 8     {
 9       flower[a] += b;
10       a += a & -a;
11     }
12 }
13 int sum(int a)
14 {
15    int s=0;
16     while (a>0)
17     {
18         s += flower[a];
19         a -= a & -a;
20     }
21   return s;
22 }
23 int main()
24 {
25     int t,a,b;
26     char s[12];
27     scanf ("%d",&t);
28     for (int j=1;j<=t;j++)
29     {
30         scanf("%d",&n);
31        memset(flower,0,sizeof(flower));
32         for (int i=1;i<=n;i++)
33            {
34                scanf ("%d",&b);
35                 add(i,b);
36            }
37         printf("Case %d:\n",j);
38         while (scanf ("%s",s) && s[0] != ‘E‘)
39         {
40             scanf ("%d%d",&a,&b);
41             if (s[0] == ‘A‘)
42                         add(a,b);
43             if (s[0] == ‘S‘)
44                         add(a,-b);
45             if (s[0] == ‘Q‘)
46                        printf ("%d\n",sum(b)-sum(a-1));
47         }
48     }
49     return 0;
50 }

时间: 2024-10-01 07:49:36

暑假集训(2)第四弹 ----- 敌兵布阵(hdu1166)的相关文章

敌兵布阵 (HDU1166)

Problem Description C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营 地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况.由于采取了某种先进的监测手段,所以每个工兵营地的人数C国都掌握的一清二楚,每个工 兵营地的人数都有可能发生变动,可能增加或减少若干人手,但这些都逃不过C国的监视. 中央情报局要研究敌人究竟演习什么战术,所以Tidy要随时向Derek汇报某一段连续的工兵营地一共有

ACM-树状数组之敌兵布阵——hdu1166

***************************************转载请注明出处:http://blog.csdn.net/lttree*************************************** 敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 38750    Accepted Submissi

暑假集训(4)第四弹 -----排列,计数(hdu1465)

题意概括:嗯,纵使你数次帮助小A脱离困境,但上一次,小A终于还是失败了.那数年的奔波与心血,抵不过轻轻一指,便彻底 湮灭,多年的友谊终归走向末路.这一切重击把小A彻底击溃! 不为什么,你到底还是要继续帮助小A,让他走出这难言的挫折.不过怎样帮助他呢?苦苦思索之际,你不小心看到某美分集中营 上的“心灵鸡汤”,决定用这些四溢着“美味”的鸡汤帮助小A,第一个鸡汤是举例子,一个人给他的每一个网友寄信,但是都寄错了, 你认为寄错的次数绝对比完全正确的1种庞大的多,所以你需要算出这些数字来安慰小A. 问题分

暑假集训(1)第四弹 -----Find a way(Hdu2612)

Description Pass a year learning in Hangzhou, yifenfei arrival hometown Ningbo at finally. Leave Ningbo one year, yifenfei have many people to meet. Especially a good friend Merceki. Yifenfei’s home is at the countryside, but Merceki’s home is in the

(线段树)敌兵布阵--hdu--1166 (入门)

链接: http://acm.hdu.edu.cn/showproblem.php?pid=1166 自己第一次在没有看题解AC出来的线段树,写的可能不是太好,再贴个学长的代码,学习一下 发现自己的Update部分写了很多废话,直接用a[r]里的值就好了,我还传了那么多的值,真傻! 代码: 1 #include<stdio.h> 2 #include<algorithm> 3 #include<stdlib.h> 4 #include<string.h> 5

暑假集训(2)第五弹 ----- Who&#39;s in the Middle(poj2388)

G - Who's in the Middle Crawling in process... Crawling failed Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Description FJ is surveying his herd to find the most average cow. He wants to know how much milk this 'median

HUU1166(敌兵布阵)

题目地址:敌兵布阵 题目大意: 中文题目. 解题思路: 简单的线段树,更新节点,区间求和. (关于线段数的模板,代码注释很详细) 代码: 1 #include <algorithm> 2 #include <iostream> 3 #include <sstream> 4 #include <cstdlib> 5 #include <cstring> 6 #include <cstdio> 7 #include <string&

【线段树I:母题】hdu 1166 敌兵布阵

[线段树I:母题]hdu 1166 敌兵布阵 题目链接:hdu 1166 敌兵布阵 题目大意 C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又開始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况. 因为採取了某种先进的监測手段,所以每一个工兵营地的人数C国都掌握的一清二楚,每一个工兵营地的人数都有可能发生变动.可能添加或降低若干人手,但这些都逃只是C国的监视. 中央情报局要研究敌人到底演习什么战术,所以

敌兵布阵-线段树(1)

A - 敌兵布阵 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Description C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营 地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况.由于采取了某种先进的监测手段,所以每个工兵营地的人数C国都掌握的一清二楚,每个