• 模板——线段树维护最大子段和 SP1716 GSS3


    ${color{Pink}{>>Question}}$

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <algorithm>
     4 #include <cstring>
     5 #include <cmath>
     6 #define ll long long
     7 using namespace std;
     8 
     9 template <typename T> void in(T &x) {
    10     x = 0; T f = 1; char ch = getchar();
    11     while(!isdigit(ch)) {if(ch == '-') f = -1; ch = getchar();}
    12     while(isdigit(ch)) {x = 10*x + ch - '0'; ch = getchar();}
    13     x *= f;
    14 }
    15 
    16 template <typename T> void out(T x) {
    17     if(x < 0) putchar('-'),x = -x;
    18     if(x > 9) out(x/10);
    19     putchar(x%10 + '0');
    20 }
    21 
    22 //------------------------------------------------------------
    23 
    24 const int N = 50005;
    25 
    26 int n,q,a;
    27 
    28 struct node {
    29     int lm,rm,all,sum;
    30 }t[N<<2];
    31 
    32 void P_up(node &u,node ls,node rs) {
    33     u.sum = ls.sum + rs.sum;
    34     u.all = max(max(ls.all,rs.all),ls.rm+rs.lm);
    35     u.lm = max(ls.lm,ls.sum+rs.lm); u.rm = max(rs.rm,rs.sum+ls.rm);
    36     u.all = max(u.all,max(u.lm,u.rm));
    37 }
    38 
    39 void Build(int u,int l,int r) {
    40     if(l == r) {in(a); t[u].lm = t[u].rm = t[u].all = t[u].sum = a; return;}
    41     int mid = (l+r)>>1;
    42     Build(u<<1,l,mid); Build(u<<1|1,mid+1,r);
    43     P_up(t[u],t[u<<1],t[u<<1|1]);
    44 }
    45 
    46 void A(int u,int l,int r,int x,int k) {
    47     if(l == r) {t[u].all = t[u].lm = t[u].rm = t[u].sum = k; return;}
    48     int mid = (l+r)>>1;
    49     if(x <= mid) A(u<<1,l,mid,x,k); else A(u<<1|1,mid+1,r,x,k);
    50     P_up(t[u],t[u<<1],t[u<<1|1]);
    51 }
    52 
    53 node Q(int u,int l,int r,int x,int y) {
    54     if(x <= l && y >= r) {return t[u];}//important
    55     int mid = (l+r)>>1;
    56     if(y <= mid) return Q(u<<1,l,mid,x,y);
    57     else if(x > mid) return Q(u<<1|1,mid+1,r,x,y);
    58     else {
    59         node _u,ls,rs;
    60         ls = Q(u<<1,l,mid,x,mid); rs = Q(u<<1|1,mid+1,r,mid+1,y);
    61         P_up(_u,ls,rs);
    62         return _u;
    63     }
    64 }
    65 
    66 int main() {
    67     int op,x,y; in(n);
    68     Build(1,1,n);
    69     in(q);
    70     while(q--) {
    71         in(op); in(x); in(y);
    72         if(!op) A(1,1,n,x,y);
    73         else out(Q(1,1,n,x,y).all),putchar('
    ');
    74     }
    75     return 0;
    76 }
  • 相关阅读:
    ExtJs多级联动菜单的一种实现
    初学jquery之自学笔记(2)
    微软MVP评Silverlight的功能特性和价值
    利用XMLFormView在Web部件页中或者自定义页面中嵌入Infopath表单
    初学jquery之自学笔记(3)
    我想大声告诉你
    HTC G7 金卡 制作
    黑苹果配置
    我的Android 从 2.3开始! 开发环境搭建
    新台式机配置表
  • 原文地址:https://www.cnblogs.com/mzg1805/p/11444574.html
Copyright © 2020-2023  润新知