1512: 奇怪的导弹

时间限制: 3 Sec  内存限制: 32 MB
提交: 31  解决: 13
[提交][状态][讨论版]

题目描述

最近国际形势比较紧张,就拿中国来说,比如南海问题,钓鱼岛事件等等,由此看出海防是国防中的重要一块

为了加强海防,我国最近研制出了一种非常厉害且奇怪的导弹,导弹可以跳跃式打击,每次可以杀死c个人,假设

海岸线上有n个敌军的阵地,如果现在中弹的敌军阵地是第i个,那么下一个中弹的敌军阵地就是第i+k个,由于导

弹的能量有限,所以它打击的最远距离不会超过第r个敌军阵地;我国海军最高指挥官有两件事要做,我们暂且把它

定义为1号事件,2号事件;

1号事件:发射一枚每次可以杀死c个人的导弹打击敌军的第L个阵地,估计这枚导弹最远能到达敌军的第R

个阵地(但第R个阵地不一定打得到,因为导弹是跳跃式的)

2号事件:刺探第i个敌军阵地还剩多少人;

(c可以为负数,每个敌军阵地的人数也可能是负数,虽然有点不符合常理,但是为了解题的需要,就...) 
 
当指挥官做第2号事情的时候,每次想要知道第i个敌军阵地的现有人数,你能帮助他解决这个问题吗?

输入

有多组测试数据,输入到文件尾结束,每组测试数据表述如下

第一行输入两个数n和k代表敌军阵地的个数和导弹的跳跃距离

第二行输入n个数a1....an,表示第1-n个敌军阵地的现有人数;

第三行输入一个数m表示指挥官要做的m件事;

下面m行每行表示一件事情 (事情就是上面的1号或2号事件)

1号事件输入格式是:1 L R c
2号事件输入格式是:2 i

(1,2号事件的参数描述如上)

(c,ai为整数,其他的输入数据皆为正整数,-500<c,ai<500,0<m<=100000,0<k<=n<100000,0<l<=r<n,0<i<=n)

输出

输出只包含一行,输出2号事情的结果,也就是第i个敌军阵地的现有人数

样例输入

5 1
1 2 3 4 5
3
1 1 5 -2
1 1 2 1
2 2 5 2
1 2 3 4 5
4
1 1 5 -2
1 1 2 1
2 1
2 3

样例输出

3
2
5
这题貌似是线段树的题,结果上来就敲线段树,结果问的竟然是单点。。。汗。。。学长在搞什么鬼。。。直接暴力就能过。。。
#include<iostream>
#include<cstring>
#include<cstdio> using namespace std;
const int N = + ;
int sum[N << ], M; void Build(int n){
for(M = ; M <= n + ; M *= );
for(int i = M + ; i <= M + n; ++ i) scanf("%d", &sum[i]);
for(int i = M - ; i > ; -- i) sum[i] = sum[i << ] + sum[i << |];
} void Updata(int n, int V){
for(sum[n+=M] += V, n /= ; n > ; n /= )
sum[n] = sum[n << ] + sum[n << |];
}
int Query(int n){
return sum[M + n];
}
int main(){
int n, k, m;
while(scanf("%d %d", &n, &k) == ){
Build( n );
scanf("%d", &m);
int p, l, r, c;
while(m --){
scanf("%d", &p);
if(p == ){
scanf("%d %d %d", &l, &r, &c);
for(int i = l; i <= r; i += k)
Updata(i, -c);
}else{
scanf("%d", &c);
printf("%d\n", Query(c));
}
}
}
}
#include<iostream>
#include<cstring>
#include<cstdio> using namespace std;
#define lson l, m, rt << 1
#define rson m + 1, r, rt << 1|1 const int N = + ;
int sum[N << ], col[N]; void PushUP(int rt){
sum[rt] = sum[rt << ] + sum[rt << |];
} void Build(int l, int r, int rt){
if(l == r){
scanf("%d", &sum[rt]);
col[l] = sum[rt];
return;
}
int m = (l + r) >> ;
Build(lson);
Build(rson);
PushUP(rt);
} void Updata(int p, int c, int l, int r, int rt){
if(l == r){
sum[rt] += c;
col[l] = sum[rt];
return;
}
int m = (l + r) >> ;
if(p <= m) Updata(p, c, lson);
else Updata(p, c, rson);
PushUP(rt);
} int main(){
int n, k, m;
while(scanf("%d %d", &n, &k) == ){
Build(, n, );
scanf("%d", &m);
int p, l, r, c;
while(m --){
scanf("%d", &p);
if(p == ){
scanf("%d %d %d", &l, &r, &c);
for(int i = l; i <= r; i += k)
Updata(i, -c, , n, );
}else{
scanf("%d", &c);
printf("%d\n", col[c]);
}
}
}
}
#include<iostream>
#include<cstring>
#include<cstdio> using namespace std;
const int N = + ; int sum[N]; void Init(int n){
for(int i = ; i <= n; i++) scanf("%d", &sum[i]);
} void Updata(int l, int r, int c, int k){
for(int i = l; i <= r; i += k) sum[i] += c;
} int main(){
int n, k, m;
while(scanf("%d %d", &n, &k) == ){
Init( n );
scanf("%d", &m);
int p, l, r, c;
while(m --){
scanf("%d", &p);
if(p == ){
scanf("%d %d %d", &l, &r, &c);
Updata(l, r, -c, k);
}else{
scanf("%d", &c);
printf("%d\n", sum[c]);
}
}
}
}
 

HNUSTOJ-1512 奇怪的导弹(暴力)的更多相关文章

  1. 蓝桥杯 2014本科C++ B组 奇怪的分式 暴力枚举

    蓝桥杯 枚举 奇怪的分式 标题:奇怪的分式 上小学的时候,小明经常自己发明新算法.一次,老师出的题目是: 1/4 乘以 8/5 小明居然把分子拼接在一起,分母拼接在一起,答案是:18/45 (参见图1 ...

  2. 2014年第五届蓝桥杯JavaB组省赛试题解析

    题目及解析如下: 题目大致介绍: 第一题到第三题以及第六题是结果填空,方法不限只要得到最后结果就行 第四题和第五题是代码填空题,主要考察算法基本功和编程基本功 第七题到第十题是编程题,要求编程解决问题 ...

  3. 清北刷题冲刺 10-31 a.m

    集合 #include<iostream> #include<cstdio> #include<algorithm> using namespace std; ], ...

  4. 【P2422】良好的感觉(单调栈优化DP//奇怪的暴力)

    话说正解是单调栈优化DP,然而貌似根据某种玄学的推算,这个题暴力出解貌似也是可以的.首先,我们枚举所有的点作为最小点,然后横向展开,遇到更小的就停止...然后再操作一下,看上去时间O(N^2),然而由 ...

  5. [Usaco2008 Feb]Line连线游戏[暴力][水题]

    Description Farmer John最近发明了一个游戏,来考验自命不凡的贝茜.游戏开始的时 候,FJ会给贝茜一块画着N (2 <= N <= 200)个不重合的点的木板,其中第i ...

  6. [转帖]利用hydra(九头蛇)暴力破解内网windows登录密码

    利用hydra(九头蛇)暴力破解内网windows登录密码 https://blog.csdn.net/weixin_37361758/article/details/77939070 尝试了下 能够 ...

  7. poj-3080(kmp+暴力枚举)

    题意:给你多个字符串,问你这几个字符串的最长公共子串是哪个,如果有多个,输出字典序最大的那个,如果最长的公共子串长度小于3,输出一个奇怪的东西: 解题思路:首先看数据,数据不大,开始简单快乐的暴力之路 ...

  8. 【BZOJ5302】[HAOI2018]奇怪的背包(动态规划,容斥原理)

    [BZOJ5302][HAOI2018]奇怪的背包(动态规划,容斥原理) 题面 BZOJ 洛谷 题解 为啥泥萌做法和我都不一样啊 一个重量为\(V_i\)的物品,可以放出所有\(gcd(V_i,P)\ ...

  9. [jzoj]1383.奇怪的问题

    Link https://jzoj.net/senior/#main/show/1383 Problem Alice总是会提出很多奇怪的问题,一天他让他的朋友Bob跟他一起研究一个奇怪的问题.问题是: ...

随机推荐

  1. 【BZOJ3545&BZOJ3551】Peaks(kruskal重构树,主席树,dfs序)

    题意:在Bytemountains有N座山峰,每座山峰有他的高度h_i. 有些山峰之间有双向道路相连,共M条路径,每条路径有一个困难值,这个值越大表示越难走, 现在有Q组询问,每组询问询问从点v开始只 ...

  2. 我不熟悉的list

    其实在日常中,链表的题目做的比较多,但是使用STL自带链表的还是比较少,所以里面的一些API不大熟悉.这边也简要介绍一些. 基本的一些API 先列举的这些和上面几篇用法几乎一样,所以不再累述. 赋值相 ...

  3. 17.Python print()函数高级用法

    前面使用 print() 函数时,都只输出了一个变量,但实际上 print() 函数完全可以同时输出多个变量,而且它具有更多丰富的功能. print() 函数的详细语法格式如下: print (val ...

  4. Mysql 里CHAR和VARCHAR的最大长度及一些注意事项

    先写出结论: Mysql 5中 非空CHAR的最大总长度是255[字节]:非空VARCHAR的最大总长度是65533[字节]. 可空CHAR的最大总长度是254[字节]:可空VARCHAR的最大总长度 ...

  5. 整合spring之后,struts2里面的自定义拦截器的invocation.invoke()总是返回input

    这个真的是整死我了,还好看见了一篇博客提示了我, 解决方法: 在spring的bean配置中我没有设置action的作用域为prototype,也就是多例的,如果不设置则就会是默认的singleton ...

  6. Jmeter性能测试环境搭建(Windows下)

    最近刚开始接触Jmeter性能测试,现总结环境搭建如下: 一.windows安装JDK步骤与环境变量配置: 1.先将下载的JDK安装到其默认目录:C:\Program Files\Java\jdk1. ...

  7. div随窗口变化设置高度

    window.onscroll = function () { sc(); }; window.onresize = function () { sc(); }; window.onload = fu ...

  8. 一起学vue指令之v-bind

    一起学vue指令之v-bind 一起学 vue指令 v-bind  网页的图片url地址并不是固定写死的,如果写死,每一个活动就改一次图片的url,一个网页有多少张图片,工作量多大? 通常来说,客户端 ...

  9. leetcode-easy-dynamic-70 Climbing Stairs

    mycode  65% class Solution(object): def climbStairs(self, n): """ :type n: int :rtype ...

  10. TODO C++ 高级篇

    http://c.biancheng.net/view/439.html