cdoj1324卿学姐与公主
Time Limit: 2000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others)
某日,百无聊赖的卿学姐打开了某11区的某魔幻游戏
在这个魔幻的游戏里,生活着一个美丽的公主,但现在公主被关押在了魔王的城堡中。
英勇的卿学姐拔出利刃冲向了拯救公主的道路。
走过了荒野,翻越了高山,跨过了大洋,卿学姐来到了魔王的第一道城关。
在这个城关面前的是魔王的精锐部队,这些士兵成一字排开。
卿学姐的武器每次只能攻击一个士兵,并造成一定伤害,卿学姐想知道某时刻从LL到RR这个区间内,从开始到现在累计受伤最严重的士兵受到的伤害。
最开始每个士兵的受到的伤害都是0
Input
第一行两个整数N,QN,Q表示总共有NN个士兵编号从11到NN,和QQ个操作。
接下来QQ行,每行三个整数,首先输入一个tt,如果tt是11,那么输入p,xp,x,表示卿学姐攻击了pp这个位置的士兵,并造成了xx的伤害。如果tt是22,那么输入L,RL,R,表示卿学姐想知道现在[L,R][L,R]闭区间内,受伤最严重的士兵受到的伤害。
1≤N≤1000001≤N≤100000
1≤Q≤1000001≤Q≤100000
1≤p≤N1≤p≤N
1≤x≤1000001≤x≤100000
1≤L≤R≤N1≤L≤R≤N
Output
对于每个询问,回答相应的值
Sample input and output
| Sample Input | Sample Output |
|---|---|
5 4 |
0 |
Hint
注意可能会爆int哦
思路:
A - 卿学姐与公主
这是专题里少的可怜的水题之一啊!!!
这题是单点更新,区间查询(求最大值)。
用build函数构建线段树,然后update进行单点更新,query查询最大值就好了、、、
节点的附加信息是max,所受伤害的最大值,update就更新的这个
然后自己手写一波就好了(其实我是用的以前写的模板,改了一点东西就好了
线段树的相关内容可以去我博客里找找。。
ac代码:
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <queue>
#include <stack>
#include <map>
#include <vector>
#include <cstdlib>
#include <string> #define PI acos((double)-1)
#define E exp(double(1))
using namespace std;
//#define MOD 772002+233
#define K 100000
struct node
{
long long maxt,sum;
long long left,right;
};
struct node tree[*K+];
long long a[*K+];
int build(int id,int l,int r)
{
tree[id].left=l;tree[id].right=r;
if(l==r)
{
tree[id].maxt=tree[id].sum=a[l];
}
else
{
build(*id,l,(l+r)/);
build(*id+,(l+r)/+,r);
tree[id].maxt=max(tree[*id].maxt,tree[*id+].maxt);
tree[id].sum=(tree[*id].sum+tree[*id+].sum);
}
return ;
} int update(int id,int pos,long long v)
{
if(tree[id].left == tree[id].right)
{
tree[id].sum=tree[id].maxt=v+tree[id].sum;
}
else
{
int mid=(tree[id].left+tree[id].right)/;
if (pos<=mid) update(id*,pos,v);
else update(id*+,pos,v);
tree[id].sum=(tree[id*].sum+tree[id*+].sum);
tree[id].maxt=max(tree[id*].maxt,tree[id*+].maxt);
}
return ;
} long long querySum(int id,int l,int r)
{
if (tree[id].left==l&&tree[id].right==r)
return tree[id].sum;
else
{
int mid=(tree[id].left+tree[id].right)/;
if (r<=mid) return querySum(id*,l,r);
else if (l>mid) return querySum(id*+,l,r);
else return querySum(id*,l,mid)+querySum(id*+,mid+,r);
}
}
long long queryMax(int id,int l,int r)
{
if(l==tree[id].left && r==tree[id].right)
return tree[id].maxt;
int mid=(tree[id].left+tree[id].right)>>;
long long ret=;
if(r<=mid)
ret=max(ret,queryMax(id<<,l,r));
else if(l>=mid+)
ret=max(ret,queryMax((id<<)+,l,r));
else
{
long long a,b;
a=queryMax(id<<,l,mid);
b=queryMax((id<<)+,mid+,r);
return max(a,b);
}
return ret;
}
int main (void)
{
int n,q;
cin>>n>>q;
memset(a,,sizeof(a));
build(,,n);
while(q--)
{
int t;
scanf("%d",&t);
if(t==)
{
long long x,y;
scanf("%lld%lld",&x,&y);
update(,x,y);
}
else
{
int x,y;
scanf("%d%d",&x,&y);
printf("%lld\n",queryMax(,x,y));
}
}
return ;
}
cdoj1324卿学姐与公主的更多相关文章
- cdoj 1324 卿学姐与公主 线段树裸题
卿学姐与公主 Time Limit: 2000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit St ...
- CDOJ 1324 卿学姐与公主(分块)
CDOJ 1324 卿学姐与公主(分块) 传送门: UESTC Online Judgehttp://acm.uestc.edu.cn/#/problem/show/1324 某日,百无聊赖的卿学姐打 ...
- A - 卿学姐与公主(线段树+单点更新+区间极值)
A - 卿学姐与公主 Time Limit: 2000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submi ...
- UESTC - 1324 卿学姐与公主
题目链接 某日,百无聊赖的卿学姐打开了某11区的某魔幻游戏 在这个魔幻的游戏里,生活着一个美丽的公主,但现在公主被关押在了魔王的城堡中. 英勇的卿学姐拔出利刃冲向了拯救公主的道路. 走过了荒野,翻越了 ...
- 卿学姐与公主 UESTC - 1324 分块模板题
题意:http://acm.uestc.edu.cn/#/problem/show/1324 中文题,自己看喽. 题解:分块模板,update时顺便更新块属性.ask时先判掉belong[l]==be ...
- UESTC 1324:卿学姐与公主(分块)
http://acm.uestc.edu.cn/#/problem/show/1324 题意:…… 思路:卿学姐的学习分块例题. 分块是在线处理区间问题的类暴力算法,复杂度O(n*sqrt(n)),把 ...
- CDOJ 1324 卿学姐与公主 分块
题目地址 分块模板 #include<cstdio> #include<algorithm> #include<math.h> using namespace st ...
- UESTC 1324 卿学姐与公主 分块板子
#include<iostream> #include<cmath> using namespace std; ; //表示当前数在哪一块里面 int belong[maxn] ...
- CDOJ1324-卿学姐与公主 【线段树点更新】
http://acm.uestc.edu.cn/#/problem/show/1324 卿学姐与公主 Time Limit: 2000/1000MS (Java/Others) Memory ...
随机推荐
- python笔记5:装饰器、内置函数、json
装饰器 装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象. 先看简单例子: def run(): time.sleep(1 ...
- Java语言中两种异常的差别
Java提供了两类主要的异常:runtime exception和checked exception.所有的checked exception是从java.lang.Exception类衍生出来的,而 ...
- jquery获取checkbox状态
$("#id").is(":checked"); 返回true false
- TortoiseGit上传项目代码到github方法(超简单)
Github是咱广大开发者用的非常多的项目代码版本管理网站,项目托管可以是私人的(private)或者公开的(public),私人的收费,一个月7美金.咱这里就只说我们个人使用的,一般都是代码对外开放 ...
- smartJS 0.1 API 讲解 - FlowController
本篇介绍0.1版中最后一个特性,FlowController:同时也对第一版总结一下,因为近两年全部都是在搞前端,都是做一些js框架类的东西,也做了不少有意思的功能,做smartjs对我来说一个是对自 ...
- boost数据结构tuple
boost数据结构tuple tuple(元组)定义了一个有固定数目元素的容器,其中每个元素类型可以不相同,这与其它容器有着本质的区别!vector和array虽然可以容纳很多元素,但是元素的类型必须 ...
- JS encodeURI和encodeURIComponent
一.最常用的encodeURI和encodeURIComponent 对URL编码是常见的事,所以这两个方法应该是实际中要特别注意的.它们都是编码URL,唯一区别就是编码的字符范围,其中encodeU ...
- python3----练习题(冒泡排序)
冒泡,原理是临近的数字两两进行比较,按照从小到大的顺序进行交换,这样交换一次之后,最大的数字就被交换到了最后一位. li = [33, 2, 10, 1] for j in range(1, len( ...
- WebSocket入门教程(五)-- WebSocket实例:简单多人聊天室
from:https://blog.csdn.net/u010136741/article/details/51612594 [总目录] WebSocket入门教程--大纲 [实例简介] ...
- c# Log4net的结构
log4net 有四种主要的组件,分别是Logger(记录器), Repository(库), Appender(附着器)以及 Layout(布局).