zoukankan      html  css  js  c++  java
  • 【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 }
  • 相关阅读:
    mvc实例
    mvc
    设计模式总结
    作业——《XXX》系统设计时所实现的质量属性战术
    实训第十四天
    实训第十三天
    实训第十二天
    实训第十一天
    实训第十天
    实训第九天
  • 原文地址:https://www.cnblogs.com/zxhl/p/4688489.html
Copyright © 2011-2022 走看看