NYOJ -123 士兵杀敌(四)

 

士兵杀敌(四)

时间限制:2000 ms  |  内存限制:65535 KB
难度:5
描述

南将军麾下有百万精兵,现已知共有M个士兵,编号为1~M,每次有任务的时候,总会有一批编号连在一起人请战(编号相近的人经常在一块,相互之间比较熟悉),最终他们获得的军功,也将会平分到每个人身上,这样,有时候,计算他们中的哪一个人到底有多少军功就是一个比较困难的事情,军师小工的任务就是在南将军询问他某个人的军功的时候,快速的报出此人的军功,请你编写一个程序来帮助小工吧。

假设起始时所有人的军功都是0.

输入
只有一组测试数据。
每一行是两个整数T和M表示共有T条指令,M个士兵。(1<=T,M<=1000000)
随后的T行,每行是一个指令。
指令分为两种:
一种形如
ADD 100 500 55 表示,第100个人到第500个人请战,最终每人平均获得了55军功,每次每人获得的军功数不会超过100,不会低于-100。
第二种形如:
QUERY 300 表示南将军在询问第300个人的军功是多少。
输出
对于每次查询输出此人的军功,每个查询的输出占一行。
样例输入
4 10
ADD 1 3 10
QUERY 3
ADD 2 6 50
QUERY 3
样例输出
10
60
 1 /* 功能Function Description:     NYOJ-123 士兵杀敌四------树桩数组--插线问点
 2     开发环境Environment:          DEV C++ 4.9.9.1
 3     技术特点Technique:
 4     版本Version:
 5     作者Author:                   可笑痴狂
 6     日期Date:                      20120807
 7     备注Notes:
 8 */
 9 
10 // 代码一:----树状数组(插线问点)
11 #include<stdio.h>
12 #include<string.h>
13 int a[1000001];
14 int M;
15 
16 int lowbit(int i)
17 {
18     return i&(-i);
19 }
20 
21 void update(int i,int num)
22 {
23     while(i<=M)
24     {
25         a[i]+=num;
26         i+=lowbit(i);
27     }
28 }
29 
30 int getsum(int i)
31 {
32     int sum=0;
33     while(i>0)
34     {
35         sum+=a[i];
36         i-=lowbit(i);
37     }
38     return sum;
39 }
40 
41 int main()
42 {
43     int T,st,end,k,i;
44     char cmd[10];
45     scanf("%d%d",&T,&M);
46     for(i=0;i<T;++i)
47     {
48         scanf("%s",cmd);
49         if(cmd[0]=='A')
50         {
51             scanf("%d%d%d",&st,&end,&k);
52             update(st,k);        
53             update(end+1,-k);     
54         }
55         else
56         {
57             scanf("%d",&k);
58             printf("%d\n",getsum(k));      //输出第k个人的军工
59         }
60     }
61     return 0;
62 }

 

 

 1 //代码二:
 2 //-----线段树(超时了----应该是代码写的大材小用了,本题只用查询一个点,
 3 //自己写的插入函数可以把线段都更新了,适用于查询任意区间的军工总和,把查询函数稍加改进就能查线段了)
 4 #include<stdio.h>
 5 #include<malloc.h>
 6 
 7 struct node
 8 {
 9     int lc,rc;
10     int sum;
11 }*tree;
12 
13 void build(int s,int t,int T)
14 {
15     int mid=(s+t)>>1;
16     tree[T].lc=s;
17     tree[T].rc=t;
18     tree[T].sum=0;
19     if(s==t)
20         return ;
21     build(s,mid,T<<1);
22     build(mid+1,t,(T<<1)|1);
23 }
24 
25 void insert(int s,int t,int add,int T)
26 {
27     if(tree[T].lc>t||tree[T].rc<s)     
28         return ;
29     else if(s<tree[T].lc&&t<=tree[T].rc)
30         tree[T].sum+=add*(t-tree[T].lc+1);
31     else if(s>=tree[T].lc&&t<=tree[T].rc)
32         tree[T].sum+=add*(t-s+1);
33     else if(s>=tree[T].lc&&t>tree[T].rc)
34         tree[T].sum+=add*(tree[T].rc-s+1);
35     else 
36         tree[T].sum+=add*(tree[T].rc-tree[T].lc+1);
37     if(tree[T].lc==tree[T].rc)
38         return ;
39     insert(s,t,add,T<<1);
40     insert(s,t,add,(T<<1)|1);
41 }
42 
43 int qurry(int k,int T)
44 {
45     int mid=(tree[T].lc+tree[T].rc)>>1;
46     if(k<tree[T].lc||k>tree[T].rc)  //不在此范围内直接跳出
47         return 0;
48     if(tree[T].lc==tree[T].rc)
49         return tree[T].sum;
50     if(k<=mid)
51         return qurry(k,T<<1);
52     else
53         return qurry(k,(T<<1)|1);
54 }
55 
56 int main()
57 {
58     int T,st,end,k,i,M;
59     char cmd[10];
60     scanf("%d%d",&T,&M);
61     tree=(struct node *)malloc(M*3*sizeof(struct node));
62     build(1,M,1);
63     for(i=0;i<T;++i)
64     {
65         scanf("%s",cmd);
66         if(cmd[0]=='A')
67         {
68             scanf("%d%d%d",&st,&end,&k);
69             insert(st,end,k,1);
70         }
71         else
72         {
73             scanf("%d",&k);
74             printf("%d\n",qurry(k,1));      //输出第k个人的军工
75         }
76     }
77     return 0;
78 }

 

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

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

相关文章

大数据告诉你,中国女人有多勤奋

全世界只有3.14 % 的人关注了数据与算法之美前段时间&#xff0c;美国国家统计局发布了一组关于世界各国劳动参与率的数据&#xff0c;中国赫然位列世界第一&#xff0c;劳动总量世界第一&#xff0c;劳动参与率世界第一。所谓劳动总量&#xff0c;就是所有工作的人的工作时间的…

get+php+mysql_Apache+PHP+MySql 的安装及配置

每一项技术用的人多了&#xff0c;就会有人将其进行优化&#xff0c;做成一个简单、实用、大众化的工具&#xff0c;这对于初识者来说是非常方便的&#xff0c;但是对于长久学习或工作这方面的人技术人员来说是不可取的&#xff0c;所以还是要学习基础的实用方法。因此&#xf…

记一次 .NET 车联网云端服务 CPU爆高分析

一&#xff1a;背景 1. 讲故事前几天有位朋友wx求助&#xff0c;它的程序CPU经常飙满&#xff0c;没找到原因&#xff0c;希望帮忙看一下。这些天连续接到几个cpu爆高的dump&#xff0c;都看烦了????????????&#xff0c;希望后面再来几个其他方面的dump&#xff0…

下载 infoq 网站视频

今天看到 infoq 网站上一个讲 Go 语言的视频&#xff0c;速度太卡了。我家里光纤宽带也没法正常浏览&#xff0c;所以需要研究下如何下载了。 用 FireBug 看了下源代码&#xff0c;抓到其中 flash 播放控件的一个参数里有视频链接如下&#xff1a; <param name"flashva…

java swing 示例_JAVA简单Swing图形界面应用演示样例

JAVA简单Swing图形界面应用演示样例package org.rui.hello;import javax.swing.JFrame;/*** 简单的swing窗体* author lenovo**/public class HelloSwing {public static void main(String[] args) {JFrame framenew JFrame("hello Swing");frame.setDefaultCloseOpe…

group client policy无法登录,谢绝访问

以下是联想提供的临时解决方案&#xff1a; 1、在用户开机时&#xff0c;不停点击F8按键&#xff0c;在弹出的”高级启动选项”中使用键盘上的方向箭头中的向下箭头移动白色高亮条&#xff0c;选择”安全模式”&#xff0c;敲击回车键。   2、进入安全模式界面时&#xff0c;…

.NET上海社区线下Meetup - 5.22 Blazor Day

Blazor 是一个 Web UI 框架&#xff0c;Blazor 旨在简化快速的单页面 .Net 浏览器应用的构建过程&#xff0c;它虽然使用了诸如 CSS 和 HTML 之类的 Web 技术&#xff0c;但它使用 C&#xff03;语言和 Razor 语法代替 JavaScript 来构建可组合的 Web UI 。通过提供用于编译到 …

入门机器学习,开启人工智能大门!

AI这个词相信大家都非常熟悉&#xff0c;近几年来人工智能圈子格外热闹&#xff0c;光是AlphoGo就让大家对它刮目相看。今天小天就来跟大家唠一唠如何进军人工智能的第一步——机器学习。在机器学习领域&#xff0c;Python已经成为了主流。一方面因为这门语言简单易上手&#x…

java集合框架的结构_集合框架(Collections Framework)详解及代码示例

简介集合和数组的区别&#xff1a;数组存储基础数据类型&#xff0c;且每一个数组都只能存储一种数据类型的数据&#xff0c;空间不可变。集合存储对象&#xff0c;一个集合中可以存储多种类型的对象。空间可变。严格地说&#xff0c;集合是存储对象的引用&#xff0c;每个对象…

oracle undo

UNDO表空间用于存放UNDO数据,当执行DML操作(INSERT,UPDATE和DELETE)时,oracle会将这些操作执行前的旧数据 写入到 UNDO段,在oracle9i之前,管理UNDO数据时使用(Rollback Segment)完成的.从oracle9i开始,管理UNDO数据不仅可以使用回滚段,还可以使用UNDO表空间.因为规划和管理回滚…

Unity3D OpenVR 虚拟现实 保龄球打砖块游戏开发

据说水哥买了 Valve Index 设备&#xff0c;既然这个设备这么贵&#xff0c;不开发点有&#xff08;zhi&#xff09;趣&#xff08;zhang&#xff09;游戏就感觉对不起这个设备。本文将来开始着手开发一个可玩性不大&#xff0c;观赏性极强的保龄球打砖块游戏。这仅仅只是一个入…

mac mysql 移动硬盘_MAC一些高能过程记录(一些没必要的坑)

搞计算机的&#xff0c;谁电脑上没个数据库&#xff0c;不管用不用的着&#xff0c;有时候总需要&#xff0c;比如调试下博客呀之类的, 毕竟一般都会觉得数据库很好玩啊1.MySql安装&#xff1a;dmg、pkg什么的直接装吧&#xff0c;结束后会给你一个提示&#xff0c;上面会有密…

数学思维比数学运算更重要

全世界只有3.14 % 的人关注了数据与算法之美数学的证明依靠严密的逻辑推理&#xff0c;一经证明就永远正确&#xff0c;所以&#xff0c;数学证明是绝对的。相对而言&#xff0c;科学的证明则依赖于观察、实验数据和理解力&#xff0c;科学理论的证明难以达到数学定理证明所具有…

多年前那些优秀的工程师,后来都去哪儿了?

这是头哥侃码的第241篇原创上周末&#xff0c;我读初中的儿子突然问我&#xff1a;“爸爸&#xff0c;你是不是从好买离职了&#xff1f;”我听完&#xff0c;忙惊讶地问他是怎么知道的。他朝我做了个鬼脸&#xff0c;然后指了指我的手机说&#xff1a;“你的文章写的如此生动&…

使用easyUI 格式化datagrid列

author YHC 以下示例格式化在easyui DataGrid 里的列数据,和使用自定义列formatter ,如果价格小于20就将文本变为红色. 查看 Demo 格式化一个DataGrid 列,我们需要设置formatter 属性它是一个函数,这个格式化函数包含三个参数: value: 当前列对应字段值.row: 当前的row(行)记录…

makefile obj文件路径_Makefile一问:如何修改.o输出文件的输出路径 Linux/Unix社区 / 程序开......

我在Linux下编成时&#xff0c;用Makefile文件生成的.o文件老是跟我的源文件在同一个目录下&#xff0c;搞得我用TAB键之余还得先再敲.c再TAB&#xff0c;为什么要多敲两次键盘&#xff1f;如果我把所有生成的.o文件放比如./obj目录下&#xff0c;岂不是少来很多麻烦&#xff1…

PreparedStatement

1 //一般使用方法2 //优点在于简化sql语句的使用3 4 5 int deptno 0;6 String dname args[1];7 String loc args[2];8 9 10 11 Connection conn null; 12 13 PreparedStatement stmt null; 14 15 Class.forName("oracle.jdbc.driver.OracleDriver"); 16 17…

让Dapper支持Mock

Dapper&#xff0c;在.net的ORM中占有一席之地&#xff0c;用法简单&#xff0c;灵活&#xff0c;使用如下。但也带来一个问题&#xff0c;就是在单元测试时&#xff0c;Mock比较难办。public List<Goods> GetAllGoods(){using var con new SqlConnection();var sql &q…

收藏 | 分享 3 种脑洞大开的Excel技巧

全世界只有3.14 % 的人关注了数据与算法之美身为职场人&#xff0c;Excel基本是每天都会打开的软件&#xff0c;如果把对它的使用熟练程度分个等级&#xff0c;大概可以分为几下几种&#xff1a;Level 1&#xff1a;对Excel的基本功能已经有所了解&#xff0c;但还不熟练&#…

Java JSON对象怎么遍历_Java遍历JsonObject对象

方法&#xff1a;Iterator iter jsonInfo.entrySet().iterator();代码示例&#xff1a;public class Test {public static void main(String[] args) {JSONObject jsonInfo new JSONObject();String key1 "a";jsonInfo.put(key1, "aa");String key2 &q…