hdu1166敌兵布阵

题意:题目是中文的:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=16216

分析:这道题目作为模板题其实值得多练习几次的。用树状数组来写:

View Code

 1 #include <stdio.h>
 2 #include <iostream>
 3 using namespace std;
 4 #define DEBUG
 5 const int MAXN = 50000 + 10;
 6 int a[MAXN], n;
 7 int lowbit(int x){return x&(-x);}
 8 int sum(int x){
 9     int ret=0;
10     while(x>0){
11         ret+=a[x];
12         x-=lowbit(x);
13     }
14     return ret;
15 }
16 void add(int x, int d){
17     while(x<=n){
18         a[x]+=d;
19         x+=lowbit(x);
20     }
21 }
22 int main(){
23 #ifndef DEBUG
24     freopen("in.txt", "r", stdin);
25 #endif
26     int T, cas=1;
27     scanf("%d", &T);
28     while(T--){
29         memset(a, 0, sizeof(a));
30         scanf("%d", &n);
31         int i, x;
32         for(i=1; i<=n; i++){
33             scanf("%d", &x);
34             add(i, x);
35         }
36         char cmd[10];
37         printf("Case %d:\n", cas++);
38         while(scanf("%s", cmd) && cmd[0]!='E'){
39             int a, b;
40             scanf("%d%d", &a, &b);
41             if(cmd[0]=='A') add(a, b);
42             else if(cmd[0]=='S') add(a, -b);
43             else if(cmd[0]=='Q') printf("%d\n", sum(b)-sum(a-1));
44         }
45     }
46     return 0;
47 }

 用线段树(点树)也是ok的:

View Code

 1 #include <stdio.h>
 2 #include <iostream>
 3 using namespace std;
 4 #define DEBUG
 5 const int MAXN = 50000 + 10;
 6 int data[MAXN], n;
 7 struct Node{
 8     int l, r, k;
 9 };
10 Node znode[4*MAXN];
11 int zfun(int a, int b){return a+b;}
12 void build(int l, int r, int n){
13     int mid=(l+r)>>1;
14     znode[n].l=l;
15     znode[n].r=r;
16     if(l==r) znode[n].k=data[l];
17     else{
18         build(l, mid, 2*n);
19         build(mid+1, r, 2*n+1);
20         znode[n].k=zfun(znode[2*n].k, znode[2*n+1].k);
21     }
22 }
23 int query(int l, int r, int n){
24     int mid=(znode[n].l+znode[n].r)>>1;
25     if(znode[n].l==l && znode[n].r==r) return znode[n].k;
26     else{
27         if(r<=mid) return query(l, r, 2*n);
28         else if(l>mid) return query(l, r, 2*n+1);
29         else return zfun(query(l, mid, 2*n), query(mid+1, r, 2*n+1));
30     }
31 }
32 void add(int nid, int d, int n){
33     int mid=(znode[n].l+znode[n].r)>>1;
34     if(znode[n].l==nid && znode[n].r==nid){
35         znode[n].k+=d;
36         int newn=n/2;
37         while(newn>=1){
38             znode[newn].k=zfun(znode[2*newn].k, znode[2*newn+1].k);
39             newn/=2;
40         }
41     }else{
42         if(nid<=mid) add(nid, d, 2*n);
43         else if(nid>mid) add(nid, d, 2*n+1);
44     }
45 }
46
47 int main(){
48 #ifndef DEBUG
49     freopen("in.txt", "r", stdin);
50 #endif
51     int T, cas=1;
52     scanf("%d", &T);
53     while(T--){
54         memset(data, 0, sizeof(data));
55         scanf("%d", &n);
56         int i, x;
57         for(i=1; i<=n; i++) scanf("%d", &data[i]);
58         build(1, n, 1);
59         char cmd[10];
60         printf("Case %d:\n", cas++);
61         while(scanf("%s", cmd) && cmd[0]!='E'){
62             int a, b;
63             scanf("%d%d", &a, &b);
64             if(cmd[0]=='A') add(a, b, 1);
65             else if(cmd[0]=='S') add(a, -b, 1);
66             else if(cmd[0]=='Q') printf("%d\n", query(a, b, 1));
67         }
68     }
69     return 0;
70 }

 

时间: 2024-10-11 23:59:27

hdu1166敌兵布阵的相关文章

[HDU][线段树]1166.敌兵布阵

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

hdu 1166 敌兵布阵

点击打开链接hdu 1166 思路: 线段树单点更新 分析: 1 题目给定n个兵营的人数,现在有三种操作  (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个营地的总人数; 2 最简单的线段树单点更新的题目 代码: /***********************************************

京东双11启动排兵布阵:3C优势之外 打出智慧平台

京东的3C优势一以贯之,最直接的表现是,刚刚升任为京东3C文旅事业部的胡胜利看了最新出炉的大促数据后,很是开心,甚至讲话过程中,时不时蹦出他的湖北家乡口音. 11月1日,京东举行双十一启动发布会,联合百大厂商开启首个线上线下联合大促双11,现场,胡胜利高兴地公布最新战绩--大促首日,24秒破亿,105秒破3亿. 同时,全球市场调研公司GfK数据显示,2017年1-8月京东3C在线上市场占有率超过50%,位列第一,且京东3C增速远超其他线上平台近两倍,是线下市场增速的三倍. 双十一启动大会上,率先

Wi-Fi建设,如何“排兵布阵”?

二战中知名的"马奇诺防线",虽然投资巨大,但依靠预判以静制动,机动性较差,面对变化时很难具有抵抗力,短短1个月内就被德军采用动态的迂回战术突破了. 换个角度来看,如果强大的力量和资源被固化了,当现实和预判不一致,只能眼睁睁地看着威胁从自己的薄弱处突破,可见,机动性和资源随需而动是多么的重要! 与此类似,大多数Wi-Fi的建设者在建网之初,都要思考一个同样的问题,那就是如何"排兵布阵"?即无线网络领域的网络规划或业务模型判断. Wi-Fi建设者:如何规划随需而动的无线

如何排兵布阵玩转微博营销矩阵策略

中介交易 SEO诊断 淘宝客 云主机 技术大厅 前言 什么是微距阵?恐怕很多人连微博营销都没有搞清楚,再引入微距阵这样的概念不免更加茫然不知所措.但是微距阵是微博营销战中不得不用到的策略之一.表面上它是根据产品.品牌.功能等不同定位需求建立的各个子微博,实质上它更大的野心是通过不同账号精准有效地覆盖商家的各个用户群体.在战略上通过布点.连线.成面.引爆.监测来实现营销效果的最大化,在微博的世界里让你的用户各取所需,却又无处可逃.既然排兵布阵,当然要懂得布阵之法和运营之道. 不能一个人战斗 随着用

中移动排兵布阵电商平台 移动商城一期招标启动

&http://www.aliyun.com/zixun/aggregation/37954.html">nbsp;   [搜狐IT消息]12月10日消息,消息人士透露,中国移动将涉足电商领域,并且将在近期开展相关采购工作. 据了解,中国移动将于近期开展移动商城一期工程应用软件和系统集成采购招标,本次招标分为销售子系统和服务子系统两个包,其中服务子系统包括自助服务平台和统一接口平台:销售子系统包括产品销售平台.能力开放平台.支付网关和物流网关. 此前,中国移动启动大区物流中心试运营

天天格斗如何排兵布阵 天天格斗布阵攻略

选择我们需要进入的存档,若是第一次进入游戏时,可任意创建一个存档,刚进入游戏时会进入到新手引导,打过 一两个关卡后,就能开启主界面中的功能.我们要设置其他伙伴上阵作战,就在布阵这个系统当中. 进入到布阵界面,界面就可以看到当前可派遣上阵作战的佣兵,初始系统会赠送丽娜雅给大家.点击佣兵头像,在界面中间会显示这个佣兵的生命.攻击力.防御.技能等各项属性. 界面右侧可设置佣兵和主角的站位,不同的佣兵和技能课搭配出相当多的作战队形,可应对各种艰难的战斗.我们只要将佣兵拖放到右边方框内即可.上阵作战佣兵的

深圳三大运营商排兵布阵促销各出狠招

三大运营商的3G手机市场争夺战再度升级.继上月中国移动首批深度定制3G手机陆续上市后,中国电信和中国联通也推出了首次集采的3G手机.其中,中电信刚刚上市的.携手深圳本土企业打造的首款超高端全业务3G手机,更打响了3G手机市场的高端争夺战.记者昨日发现,深圳市场上三种制式的3G手机已经开始"贴身肉搏". 中国电信高调杀入 记者昨日在深圳本土企业宇龙酷派得到证实,电信首款超高端3G手机.同时也是目前唯一支持中国电信3G全业务的EVDO手机(兼容CDMA2000 3G网络与GSM网络,并全面

HDU1166

敌兵布阵 Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Submission(s) : 19   Accepted Submission(s) : 14 Problem Description C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工