描述

河蟹王国有一位河蟹国王,他的名字叫羊驼。河蟹王国富饶安定,人们和谐相处。有一天,羊驼国王心血来潮,想在一部分人中挑出最和谐的人。于是,羊驼国王将他的子民排成了一列(==!!b汗~好长呀)。每个人都有一个初始的和谐值。羊驼国王每次会选择一个区间[L,R],这个区间中和谐值最大的人就是国王选出的人。而且,在某一时间,区间[L’,R’]里的人会变得熟悉,因此他们每个人的和谐值都会上升一个相同的值C。羊驼国王想知道,对于每一次选择,他选出的最大和谐值是多少。

输入格式

第一行是一个数N(1<=N<=100000),表示人数。

接下来的N行,每行一个数,表示排成的序列第i个人和谐值的初始值。

接下来是一个数M(1<=M<=100000),表示羊驼国王或他的子民有所活动(羊驼国王选择一个区间算一次,某区间里的人增长和谐值算一次)的总次数。

接下来的M行,每行第一个是一个数K,K是1或2,若K=1,接下来有三个数L,R,C,表示区间[L,R]的所有人增加C的和谐值;若K=2,接下来有两个数L,R,表示国王选择了区间[L,R]。

输出格式

每次对于国王选择区间,输出选择区间里的最大和谐值。

样例输入

5

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

样例输出

4

6

限制

每个测试点1s。

代码

 #include <cstdio>
#include <cmath>
#include <cstring>
#include <ctime>
#include <iostream>
#include <algorithm>
#include <set>
#include <vector>
#include <queue>
#include <typeinfo>
#include <map>
#include <stack>
typedef long long ll;
using namespace std;
inline ll read()
{
ll x=,f=;
char ch=getchar();
while(ch<''||ch>'')
{
if(ch=='-')f=-;
ch=getchar();
}
while(ch>=''&&ch<='')
{
x=x*+ch-'';
ch=getchar();
}
return x*f;
}
//**************************************************************************************
struct ss
{
int l,r,v,tag;
}tr[*];
int n,a[];
void build(int k,int l,int r)
{
tr[k].l=l;
tr[k].r=r;
if(l==r) {tr[k].v=a[l];return ;}
int mid=(l+r)>>;
build(k<<,l,mid);
build(k<<|,mid+,r);
// tr[k].v=tr[k<<1].v+tr[k<<1|1].v;
tr[k].v=max(tr[k<<].v,tr[k<<|].v);
}
void pushdown(int k)
{
tr[k<<].tag+=tr[k].tag;
tr[k<<|].tag+=tr[k].tag;
tr[k<<].v+=tr[k].tag;
tr[k<<|].v+=tr[k].tag;
tr[k].tag=;
}
void update(int k,int l,int r,int x)
{
if(l==tr[k].l&&r==tr[k].r)
{
tr[k].tag+=x;
tr[k].v+=x;
return;
}
if(tr[k].tag) pushdown(k);
int mid=(tr[k].l+tr[k].r)>>;
if(r<=mid)update(k<<,l,r,x);
else if(l>mid)update(k<<|,l,r,x);
else {
update(k<<,l,mid,x);
update(k<<|,mid+,r,x);
}
tr[k].v=max(tr[k<<].v,tr[k<<|].v);
}
int ask(int k,int l,int r)
{
if(l==tr[k].l&&tr[k].r==r)
{
return tr[k].v;
}
if(tr[k].tag) pushdown(k);
int mid=(tr[k].l+tr[k].r)>>;
if(r<=mid) return ask(k<<,l,r);
else if(l>mid)return ask(k<<|,l,r);
else {
return max(ask(k<<,l,mid),ask(k<<|,mid+,r));
}
}
int main()
{ scanf("%d",&n);
for(int i=;i<=n;i++)
{
scanf("%d",&a[i]);
}
build(,,n);
int q;
scanf("%d",&q);
for(int i=;i<=q;i++)
{
int t;
scanf("%d",&t);
if(t==)
{
int x,y;
scanf("%d%d",&x,&y);
printf("%d\n",ask(,x,y));
}
else {
int x;int y;int c;
scanf("%d%d%d",&x,&y,&c);
update(,x,y,c);
}
}
return ;
}

【vijos1659】河蟹王国 线段树<区间修改+区间最大值>的更多相关文章

  1. HDU - 1754 I Hate It (线段树点修改求最大值)

    题意:有N个学生M条操作,0<N<=200000,0<M<5000,要么查询某区间内学生的最高分,要么更改某学生的成绩. 分析:原理和线段树点修改求和类似. #include& ...

  2. vijos 1659 河蟹王国 线段树区间加、区间查询最大值

    河蟹王国 Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 https://vijos.org/p/1659 Description 河蟹王国有一位河蟹国王,他 ...

  3. HDU 4417.Super Mario-可持久化线段树(无修改区间小于等于H的数的个数)

    Super Mario Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  4. HDU 2665.Kth number-可持久化线段树(无修改区间第K小)模板 (POJ 2104.K-th Number 、洛谷 P3834 【模板】可持久化线段树 1(主席树)只是输入格式不一样,其他几乎都一样的)

    Kth number Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  5. Lightoj 1348 Aladdin and the Return Journey (树链剖分)(线段树单点修改区间求和)

    Finally the Great Magical Lamp was in Aladdin's hand. Now he wanted to return home. But he didn't wa ...

  6. I Hate It HDU - 1754 线段树 单点修改+区间最值

    #include<iostream> #include<cstring> using namespace std; ; int m,n,p; struct node{ int ...

  7. 【学习笔记】浅析平衡树套线段树 & 带插入区间K小值

    常见的树套树 一般来说,在嵌套数据结构中,线段树多被作为外层结构使用. 但线段树毕竟是 静态 的结构,导致了一些不便. 下面是一个难以维护的例子: 带插入区间 \(k\) 小值问题 来源:Luogu ...

  8. HDU 1754 I Hate It(线段树单点替换+区间最值)

    I Hate It [题目链接]I Hate It [题目类型]线段树单点替换+区间最值 &题意: 本题目包含多组测试,请处理到文件结束. 在每个测试的第一行,有两个正整数 N 和 M ( 0 ...

  9. HDU 3577Fast Arrangement(线段树模板之区间增减更新 区间求和查询)

    Fast Arrangement Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) ...

随机推荐

  1. ssh项目删除

    1.在页面添加删除跳转 <td><a href="deleteStandard.action?id=${sta.id }">删除</a>< ...

  2. C++_Eigen函数库用法笔记——Matrix and Vector Arithmetic

    Addition and subtraction Scalar multiplication and division Transposition Matrix-matrix and matrix-v ...

  3. Ajax相同url的请求,IE缓存问题

    最近做一个小项目,其中的一个页面如下,需要实现异步改变“是否推荐”的状态. 请求的代码如下: $.get("/Contorller/Edit", { id: id }, funct ...

  4. Linux 查看CPU,内存,硬盘 !转

    Linux 查看CPU,内存,硬盘 本文转自:http://hi.baidu.com/mumachuntian/item/a401368dbe8a66cab07154e8 1 查看CPU 1.1 查看 ...

  5. Linux的一个问题ircbot进程

    首先该问题目前还不清楚希望知道的人可以回复我mail fengtaotao2012x@163.com 今天执行一次常规服务器安全抽查的时候发现一台web服务器的一个奇怪的进程 而且更厉害的是cpu使用 ...

  6. NOIP2011 聪明的质监员

    描述 小T 是一名质量监督员,最近负责检验一批矿产的质量.这批矿产共有 n 个矿石,从 1到n 逐一编号,每个矿石都有自己的重量 wi 以及价值vi .检验矿产的流程是: 1 .给定m 个区间[Li  ...

  7. compact过滤数组中的nil

    http://ruby-doc.org/core-2.2.0/Array.html#method-i-compact compact → new_aryclick to toggle source R ...

  8. Coursera台大机器学习课程笔记15 -- Three Learning Principles

    这节课是最后一节,讲的是做机器学习的三个原则. 第一个是Occan's razor,即越简单越好.接着解释了什么是简单的hypothesis,什么是简单的model.关于为什么越简单越好,林老师从大致 ...

  9. 暑假热身 D. 条形码设计

    校ACM队准备筹划向学校批请一个专用机房.但是为了防止它变成公用机房,FL建议采用刷卡进入的办法,她设计了一种条形码,每人都对应一个.这种大小为2*n的条形码由以下三种元素构成:1*2.2*1.2*2 ...

  10. Linux netstat +awk 看攻击IP

     netstat -n | awk '/^tcp/ {n=split($(NF-1),array,":");if(n<=2)++S[array[(1)]];else++S[a ...