地兵布阵 -----------HDU-1166

C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了。A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况。由于采取了某种先进的监测手段,所以每个工兵营地的人数C国都掌握的一清二楚,每个工兵营地的人数都有可能发生变动,可能增加或减少若干人手,但这些都逃不过C国的监视。 
中央情报局要研究敌人究竟演习什么战术,所以Tidy要随时向Derek汇报某一段连续的工兵营地一共有多少人,例如Derek问:“Tidy,马上汇报第3个营地到第10个营地共有多少人!”Tidy就要马上开始计算这一段的总人数并汇报。但敌兵营地的人数经常变动,而Derek每次询问的段都不一样,所以Tidy不得不每次都一个一个营地的去数,很快就精疲力尽了,Derek对Tidy的计算速度越来越不满:"你个死肥仔,算得这么慢,我炒你鱿鱼!”Tidy想:“你自己来算算看,这可真是一项累人的工作!我恨不得你炒我鱿鱼呢!”无奈之下,Tidy只好打电话向计算机专家Windbreaker求救,Windbreaker说:“死肥仔,叫你平时做多点acm题和看多点算法书,现在尝到苦果了吧!”Tidy说:"我知错了。。。"但Windbreaker已经挂掉电话了。Tidy很苦恼,这么算他真的会崩溃的,聪明的读者,你能写个程序帮他完成这项工作吗?不过如果你的程序效率不够高的话,Tidy还是会受到Derek的责骂的. 
Input第一行一个整数T,表示有T组数据。 
每组数据第一行一个正整数N(N<=50000),表示敌人有N个工兵营地,接下来有N个正整数,第i个正整数ai代表第i个工兵营地里开始时有ai个人(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询问,输出一个整数并回车,表示询问的段中的总人数,这个数保持在int以内。 
Sample Input
1
10
1 2 3 4 5 6 7 8 9 10
Query 1 3
Add 3 6
Query 2 7
Sub 10 2
Add 6 3
Query 3 10
End 
Sample Output
Case 1:
6
33
59

题解:这是一道线段树区间修改的问题(按照模版去屑写就可以,水题),加减是一样的

AC代码为:

#include<cstdio>
#include<cmath>
#include<cstring>
#include<iostream>
using namespace std;
using namespace std;  
const int mxn = 50000 + 10;  
  
struct node {  
    int l, r, maxn, sum;
}tree[mxn<<2];  
  
int t, n;  
char str[10];  
int x, y;  
int a[mxn];  
  
void build(int m, int l, int r) 
{  
    tree[m].l = l;  
    tree[m].r = r;  
    if (l == r) 
{  
        tree[m].sum = a[l];  
        return;  
    }  
    int mid = (l + r) >> 1;  
    build(m << 1, l, mid);  
    build((m << 1) + 1, mid + 1, r);  
    tree[m].sum = tree[m << 1].sum + tree[(m << 1) + 1].sum;  
}  
  
void update(int m, int a, int val)
{  
    if (tree[m].l == a && tree[m].r == a) 
{  
       
        tree[m].sum += val;  
        return;  
    }  
    int mid = (tree[m].l + tree[m].r) >> 1;  
    if (a <= mid)  
        update(m << 1, a, val);  
    else  
        update((m << 1) + 1, a, val);  
   
    tree[m].sum = tree[m << 1].sum + tree[(m << 1) + 1].sum;  
}  
int query(int m, int l, int r) 
{  
    if (l == tree[m].l && r == tree[m].r)  
        return tree[m].sum;  
       
    int mid = (tree[m].l + tree[m].r) >> 1;  
    if (r <= mid)  
        return query(m << 1, l, r);  
    if (l > mid)  
        return query((m << 1) + 1, l, r);   
    return query(m << 1, l, mid) + query((m << 1) + 1, mid + 1, r);  
}  
  
int main()  
{  
    int k = 0;  
    scanf("%d", &t);  
    while (t--) 
{      
        scanf("%d", &n);          
        for (int i = 1; i <= n; i++) scanf("%d", &a[i]);  
        printf("Case %d:\n", ++k);  
        build(1, 1, n);  
        while (scanf("%s", str)) 
{  
            if (str[0] == 'E')   break;  
            if (str[0] == 'A') 
{  
                scanf("%d %d", &x, &y);  
                update(1, x, y);  
            }  
            if (str[0] == 'S') 
{  
                scanf("%d %d", &x, &y);  
                update(1, x, -y);  
            }  
            if (str[0] == 'Q') 
{  
                scanf("%d %d", &x, &y);  
                printf("%d\n", query(1, x, y));  
            }  
        }  
    }  
   
    return 0;  
}  


转载于:https://www.cnblogs.com/songorz/p/9386572.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/367173.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python笔记30-docstring注释添加变量

前言 python里面添加字符串注释非常简单&#xff0c;如何将变量放入 python 的函数注释里面呢&#xff1f; docstring也就是给代码加注释的内容了&#xff0c;python可以给函数&#xff0c;类、方法&#xff0c;模块添加注释内容&#xff0c;注释标准格式一般是三个双引号&…

无线路由器在手机上如何连接服务器,192.168.10.1路由器手机怎么设置? | 192路由网...

问&#xff1a;192.168.10.1路由器手机怎么设置&#xff1f;答&#xff1a;192.168.10.1是一个C类的私有IP地址&#xff0c;目前国产的路由器中&#xff0c;睿因路由器使用192.168.10.1作为默认登录地址。鉴于此&#xff0c;下面鸿哥使用睿因路由器来进行演示介绍。温馨提示&am…

Java Mission Control 5.2终于来了! 欢迎7u40!

自从我们上次听说这个叫做任务控制的小东西已经有一段时间了。 它从JRockit一直到现在都被重命名为Java Mission Control。 这是从HotSpot和JRockit融合战略中幸存下来的部分之一。 使用今天的Java SE 7 Update 40&#xff0c;您实际上可以再次使用它。 Java Mission Control …

webview布局适配实践

一、相关概念 1、viewport&#xff1a;移动设备&#xff08;包括webview&#xff09;用来显示网页的那一块区域&#xff1b; 2、devicePixelRatio属性(别名像素比&#xff0c;简称dpr)&#xff1a;window.devicePixelRatio 物理像素 / 独立像素(css中的px)&#xff1b; 3、rem…

mysql count 不等于_Mysql 不同的 count 区别

不同 count 的区别&#xff1a;count(*)、count(主键 id)和 count(1) 都表示返回满足条件的结果集的总行数&#xff1b;而 count(字 段)&#xff0c; 则表示返回满足条件的数据行里面&#xff0c;参数“字段”不为 NULL 的总个数。性能&#xff1a;count(主键 id)&#xff1a;I…

Python3爬虫(四)请求库的使用requests

Infi-chu: http://www.cnblogs.com/Infi-chu/ 一、基本用法&#xff1a; 1. 安装&#xff1a; pip install requests 2. 例子&#xff1a; import requests url http://www.baidu.com r requests.get(url) print(type(r)) # 类型是str&#xff08;JSON格式&#xff09; pr…

后台通过request.setAttribute向前台传值,前台如何去获取其中的对象或属性值

讲这些&#xff0c;我们先来了解一下request.setAttribute和request.setAttribute()这两种方法的作用。 request.getAttribute("nameOfObj"); 可得到jsp页面表单中输入框内的value。&#xff08;其实表单控件中的Object的name与value是存放在一个哈希表中的&#xff…

两个用于Eclipse的TCK –开源到底有什么?

早在5月&#xff0c;Oracle就向Eclipse Foundation 授予了兼容性测试奖学金 。 在过去的几天里&#xff0c;这引起了媒体的关注&#xff0c;我只是想确保我对整个过程和详细动作有所了解。 看起来像是一见钟情的简单诚实的礼物实际上具有更多的方面。 但让我们从头开始&#xf…

尝试连接到服务器时出错请检查虚拟机管理器,Hyper-V尝试连接到服务器出错无效类的解决方法...

Hyper-V尝试连接到服务器出错无效类的解决方法Windows10安装Hyper-V后没有自动连接到本地计算机&#xff0c;手工连接失败&#xff0c;提示&#xff1a;引用内容尝试连接到服务器"DESKTOP-6P9L2HB"时出错。请检查虚拟机管理服务是否正在运行以及是否授权你连接到此服…

Flask和mysql多线程_Flask解析(二):Flask-Sqlalchemy与多线程、多进程

Sqlalchemyflask-sqlalchemy的session是线程安全的&#xff0c;但在多进程环境下&#xff0c;要确保派生子进程时&#xff0c;父进程不存在任何的数据库连接&#xff0c;可以通过调用db.get_engine(appapp).dispose()来手动销毁已经创建的engine&#xff0c;然后再派生子进程。…

深入理解redis数据类型

转载请注明出处&#xff1a;https://www.cnblogs.com/wenjunwei/p/9720033.html redis的存储模型 redis不是普通的键值对存储&#xff0c;它实际上是一个数据结构存储服务器&#xff0c;可以支持不同类型的值。这意味着redis相比传统键值对字符串key和字符串value存储来说&…

centos7 登陆报错 grep:write error

出现这个原因是因为磁盘空间满了 通过df -h查看存储空间 发现磁盘空间满了&#xff0c;可以用 find / -type f -size 1000M 查找大于1000M的文件删除 然后找到用rm -rf 命令删除 然后就不会出现这个问题了&#xff01;转载于:https://www.cnblogs.com/lxs1314/p/8961113.html

你敢在post和get上刁难我,就别怪我装逼了

> 掘金编辑提醒&#xff1a;本文疑似有误&#xff0c;参考 听说「99% 的人都理解错了 HTTP 中 GET 与 POST 的区别」 之前好几次面试都被问到post和get有什么区别&#xff0c;肯定很多同学和我一样说了一大堆什么post比get安全&#xff0c;get比post传的少乱起八糟这样的答案…

昂首阔步:让开发人员喜欢使用您的REST API

随着JAX-RS API的发展&#xff0c;以及今年早些时候在JSR-339下发布的2.0版本&#xff0c;使用出色的Java平台创建REST服务变得更加容易。 但是&#xff0c;极大的简化带来了巨大的责任&#xff1a;记录所有这些API&#xff0c;以便其他开发人员可以快速了解如何使用它们。 不…

thinkphp mysql 更新_THINKPHP5修改数据库数据出现“缺少更新条件”的错误

查询数据库的数据分配显示在页面山修改后的数据准备传递到第三章图里接收数据&#xff0c;然后修改到数据问题出现的环境背景及自己尝试过哪些方法相关代码// 请把代码文本粘贴到下方(请勿用图片代替代码)第一张图代码public function edit(){$db_01new DB();$id_editRequest::…

angular ajax get post 参数,Angular的Post 传递参数问题及解决方法

一、传递参数过程中POST会出问题&#xff0c;问题来源&#xff1a;我们都知道向后台传参可以使用get、post&#xff0c;其形式类似于nameiyy&id001 。但是在angular中却发现使用$http post 进行异步传输的过程中后台是接收不到数据的&#xff0c;其实这个问题就是因为请求头…

[No0000187]可能是把Java内存区域讲的最清楚的一篇文章

写在前面&#xff08;常见面试题&#xff09; 基本问题&#xff1a; 介绍下 Java 内存区域&#xff08;运行时数据区&#xff09;Java 对象的创建过程&#xff08;五步&#xff0c;建议能默写出来并且要知道每一步虚拟机做了什么&#xff09;对象的访问定位的两种方式&#xff…

Java语言基础及java核心

一、Java语言特点 1、 简单 2、 面向对象 3、 分布式 4、 健壮 5、 安全 6、 中性架构跨平台 7、 超强的可移植性 8、 高性能 9、 多线程 二、java的环境变量 JAVA_HOMEC:\Program Files\Java\jdk1.8.0_101 &#xff08;到你的安装目录下&#xff09; CLASSPASH./ &#xff0…

如何使用Quartz Scheduler和日志记录创建Web应用程序

我有时会在Quartz Scheduler论坛中为用户提供帮助。 有时&#xff0c;有人会问他/她如何在Web应用程序中设置Quartz。 实际上&#xff0c;这是一件相当简单的事情。 该库已经带有一个ServletContextListener &#xff0c;您可以使用它启动调度程序。 我将在这里向您展示一个简单…

移动端日期选择插件rolldate

rolldate为上一版jquery移动端时间插件的全新版本&#xff0c;目前保留了上一版的大部分功能&#xff0c;并且增加了回调函数&#xff0c;以及主题风格选取&#xff0c;最重要的是解决了上一版本的遗留问题&#xff0c;依赖jquery、滑动不够流畅、参数设计不够合理等等。开发日…