• 【vijos1659】河蟹王国 线段树<区间修改+区间最大值>


    描述

    河蟹王国有一位河蟹国王,他的名字叫羊驼。河蟹王国富饶安定,人们和谐相处。有一天,羊驼国王心血来潮,想在一部分人中挑出最和谐的人。于是,羊驼国王将他的子民排成了一列(==!!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。

    代码

      1 #include <cstdio>
      2 #include <cmath>
      3 #include <cstring>
      4 #include <ctime>
      5 #include <iostream>
      6 #include <algorithm>
      7 #include <set>
      8 #include <vector>
      9 #include <queue>
     10 #include <typeinfo>
     11 #include <map>
     12 #include <stack>
     13 typedef long long ll;
     14 using namespace std;
     15 inline ll read()
     16 {
     17     ll x=0,f=1;
     18     char ch=getchar();
     19     while(ch<'0'||ch>'9')
     20     {
     21         if(ch=='-')f=-1;
     22         ch=getchar();
     23     }
     24     while(ch>='0'&&ch<='9')
     25     {
     26         x=x*10+ch-'0';
     27         ch=getchar();
     28     }
     29     return x*f;
     30 }
     31 //**************************************************************************************
     32 struct ss
     33 {
     34     int l,r,v,tag;
     35 }tr[100001*4];
     36 int n,a[100005];
     37 void build(int k,int l,int r)
     38 {
     39     tr[k].l=l;
     40     tr[k].r=r;
     41     if(l==r) {tr[k].v=a[l];return ;}
     42     int  mid=(l+r)>>1;
     43     build(k<<1,l,mid);
     44     build(k<<1|1,mid+1,r);
     45    // tr[k].v=tr[k<<1].v+tr[k<<1|1].v;
     46     tr[k].v=max(tr[k<<1].v,tr[k<<1|1].v);
     47 }
     48 void pushdown(int k)
     49 {
     50     tr[k<<1].tag+=tr[k].tag;
     51     tr[k<<1|1].tag+=tr[k].tag;
     52     tr[k<<1].v+=tr[k].tag;
     53     tr[k<<1|1].v+=tr[k].tag;
     54     tr[k].tag=0;
     55 }
     56 void update(int k,int l,int r,int x)
     57 {
     58     if(l==tr[k].l&&r==tr[k].r)
     59     {
     60         tr[k].tag+=x;
     61         tr[k].v+=x;
     62         return;
     63     }
     64     if(tr[k].tag) pushdown(k);
     65     int mid=(tr[k].l+tr[k].r)>>1;
     66     if(r<=mid)update(k<<1,l,r,x);
     67     else if(l>mid)update(k<<1|1,l,r,x);
     68     else {
     69         update(k<<1,l,mid,x);
     70         update(k<<1|1,mid+1,r,x);
     71     }
     72     tr[k].v=max(tr[k<<1].v,tr[k<<1|1].v);
     73 }
     74 int ask(int k,int l,int r)
     75 {
     76     if(l==tr[k].l&&tr[k].r==r)
     77     {
     78         return tr[k].v;
     79     }
     80     if(tr[k].tag) pushdown(k);
     81     int mid=(tr[k].l+tr[k].r)>>1;
     82     if(r<=mid) return ask(k<<1,l,r);
     83     else if(l>mid)return ask(k<<1|1,l,r);
     84     else {
     85         return max(ask(k<<1,l,mid),ask(k<<1|1,mid+1,r));
     86     }
     87 }
     88 int main()
     89 {
     90 
     91     scanf("%d",&n);
     92     for(int i=1;i<=n;i++)
     93     {
     94         scanf("%d",&a[i]);
     95     }
     96     build(1,1,n);
     97     int q;
     98     scanf("%d",&q);
     99     for(int i=1;i<=q;i++)
    100     {
    101         int t;
    102         scanf("%d",&t);
    103         if(t==2)
    104         {
    105             int x,y;
    106             scanf("%d%d",&x,&y);
    107             printf("%d
    ",ask(1,x,y));
    108         }
    109         else {
    110             int x;int y;int c;
    111             scanf("%d%d%d",&x,&y,&c);
    112             update(1,x,y,c);
    113         }
    114     }
    115     return 0;
    116 }
  • 相关阅读:
    centos go语言 开启代理 国内镜像
    Docker给MongoDB设置用户密码
    ubuntu镜像一般apt-get源地址都是在国外导致在构建时因为源地址问题导致下载速度极其得慢
    在centos7安装nodejs并升级nodejs到最新版本
    使用express创建简单web服务器
    关于docker的mongo镜像的部署
    Python:函数定义
    Python:if-while-for
    Python:运算符
    Python:标准数据类型6种
  • 原文地址:https://www.cnblogs.com/zxhl/p/4688489.html
Copyright © 2020-2023  润新知