QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2233|回复: 0
打印 上一主题 下一主题

2019第十届蓝桥杯B组决赛题解第九题

[复制链接]
字体大小: 正常 放大
杨利霞        

5273

主题

82

听众

17万

积分

  • TA的每日心情
    开心
    2021-8-11 17:59
  • 签到天数: 17 天

    [LV.4]偶尔看看III

    网络挑战赛参赛者

    网络挑战赛参赛者

    自我介绍
    本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。

    群组2018美赛大象算法课程

    群组2018美赛护航培训课程

    群组2019年 数学中国站长建

    群组2019年数据分析师课程

    群组2018年大象老师国赛优

    跳转到指定楼层
    1#
    发表于 2019-6-28 16:17 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    2019第十届蓝桥杯B组决赛题解第九题5 A# x# q( M0 H7 T) i! S. q6 |6 e  F
    * ]; f$ t/ X* @1 b

    题意: 两种操作,C x y,将x位置的数修改为y,Q x y,查询[x,y]之间的第8大值,y-x+1<= 8的话输出0

    思路: 区间第8大值,线段树在时间、空间都够了(蓝桥怎么会让手写主席树。。)/ h  {! f; ?: d( o$ q
    每个节点存储它管辖的这个区间的前8大值,修改的时候暴力merge,单次修改复杂度log(n)*8
    4 i) `! }, l. L5 H( a查询的时候返回含有8个值得list,并不断merge

    代码:

    ; W: x9 i( T! ]+ }% e/ X
    #include<bits/stdc++.h>
    : `6 J6 s$ n/ {0 y# k- B2 @4 A#define mem(a,b) memset(a,b,sizeof(a))6 u$ s( i8 e6 A4 E* |: C( r8 C
    using namespace std;4 L& \9 f! W) l# O' z5 Q& V2 S* i
    typedef long long ll;; y5 B+ j( T6 h! j$ |. p
    const int inf = 0x3f3f3f3f;
    & e6 ~5 m# `2 Lconst int maxn = 1e5+55555;
    # i, B: N. E5 S) i( l+ Jconst ll mod = 998244353;
    " z/ i# k& _1 b; Nconst double eps = 1e-7;
    : b1 g4 W6 G3 ~: f! f3 [: a4 u5 g% Y) G8 q
    struct tree {& {: Q' Q" C5 Y; [
        int l,r;
    * a( w5 r( Y- p# D6 e6 g    int p[10];
    ; Q9 Z. x  N7 z5 H" V6 M  k2 e. I} t[maxn<<2];9 D+ \: {3 A4 `3 A$ f8 w: u
    ; Q3 p' o' v8 O' o  u+ F
    int l,n;
    0 g. E1 T$ ]" ?5 x& P- y  l
    . h0 N3 Z( N" \$ @void build(int i,int l,int r) {
    0 y& ]  O+ I; \& }/ U    t.l = l;
    0 S( g( F2 N2 z& F    t.r = r;
    , D" W# @3 J6 Y. x8 `8 [, {    mem(t.p,0);
      x, _+ P  j7 D6 W4 b) p
    + T$ \3 q; K! O2 e5 A5 s  x    if(l == r) return ;/ x( r- D6 g, n. ?! F
        int mid = (l+r)>>1;6 {* [* j5 ]" X7 h# o& n
        build(i<<1,l,mid);
    3 g9 `) @( M" Y7 x# b% o+ G7 z7 v    build(i<<1|1,mid+1,r);7 @* e( C5 p1 ]8 m
        return ;0 e* [/ |, E& p6 ]1 T& k" V
    }! G4 Q) C; }' w: y( o- k

    7 i1 F6 N) U% q( X3 ovoid update(int i) {
    3 f2 j& @" H  W0 u; t  @    int cnt1 = 0,cnt2 = 0;
    6 l1 ]! q9 X$ K6 B9 \4 Y    for(int j = 0;j< 8;j++) {
    + m. L! r$ f. L/ B        if(t[i<<1].p[cnt1]> t[i<<1|1].p[cnt2]) {3 I: |4 [# D" W
                t.p[j] = t[i<<1].p[cnt1];+ V/ B5 r# r3 |7 n( V6 m* C
                cnt1++;3 H7 r% W; Y8 h- L$ E% a
            } else {
    ' Q* c+ x; v8 Y            t.p[j] = t[i<<1|1].p[cnt2];7 E, j# H* p3 H( @8 }2 b
                cnt2++;8 a  D0 r" e! T- [& [
            }
    2 ~3 Q9 P9 F) ], G, \    }% h7 C$ W5 G. P+ U* I1 l6 ?+ A5 _
        return ;
    5 d3 P7 S0 L* F3 O4 x2 }% p9 C}
    ' _6 b/ M5 q+ Y1 N
    7 q- F4 @7 i  `2 j  H( Tvoid modify(int i,int pos,int val) {
    8 A% F5 ~. S. \* ?    if(t.l> pos || t.r< pos) return ;; ], Y: q( \- x9 g% z
        if(t.l == t.r) {
    2 b8 o, s) b, y2 r& t8 A        t.p[0] = val;: J- R, L2 w1 [
            return ;: p6 x4 B* z; n  |1 W; m3 a
        }
    % V; X( O4 k( S  v1 J0 G    modify(i<<1,pos,val);& H! a7 Z! g- T' U4 v
        modify(i<<1|1,pos,val);
    3 s+ Y6 j$ j9 d; z& p9 Z    update(i);
    6 t  F& `: [* b    return ;
    2 X# a1 Y$ Q% Q1 c% N$ R3 u9 _}  K# r9 I, h1 P0 v
    9 v, w) E' b4 b* g( U' f
    vector<int> merge(vector<int> ans1,vector<int> ans2) {: R; t2 H8 L# S0 z
        vector<int> ans;7 U3 V2 j# J  j/ e
        int cnt1 = 0,cnt2 = 0;/ ]$ c" P9 ]% S2 T; R1 T7 C* j8 s
        for(int j = 0;j< 8;j++) {
    0 h/ I. }2 O/ P8 H+ ?# I        if(ans1[cnt1]> ans2[cnt2]) {( k1 E0 {  q  L/ W
                ans.push_back(ans1[cnt1]);5 Z6 H/ T9 I8 @5 a7 a7 J3 N+ t
                cnt1++;
    ; I6 }2 b" M$ i* I, T+ U        } else {) y# j7 p$ i! a
                ans.push_back(ans2[cnt2]);
    / N8 `  |5 F! l/ t, u            cnt2++;
    , M8 V8 i9 E' v; _9 ~; ~% N        }+ d+ z% b: E4 I/ I: f0 v) n: O
        }6 o8 X% |  Z6 J) F4 {# O$ h
        return ans;% h2 C5 N4 O6 w: o2 I3 j# i
    }
    ' k: {' D  ~# s" C% Y
    4 N5 Z% C* z; V* a1 wvector<int> query(int i,int l,int r) {
    0 \3 M; f. L- k- x. i: P    vector<int> ans;
    0 E& m6 N% d# i# i  f5 A/ v6 O1 k) p" h    if(t.l> r||t.r< l) {
    5 o+ P+ X- S( W# q; ]        for(int j = 0;j< 8;j++) ans.push_back(0);
    & d( B: V. I+ |+ J. S  b2 L0 e; D5 L0 n5 ^        return ans;
    : z3 n2 y7 V$ g6 O* B1 Y+ `' [    }
    & d+ t, X7 D6 w. h1 @4 R
    $ b' r3 G- w3 z5 h    if(t.l>= l&&t.r<= r) {
    $ j  C' M1 M4 d% F' t. t+ J6 h" c        for(int j = 0;j< 8;j++) ans.push_back(t.p[j]);
    . C, I5 n3 }& T. D+ _& o        return ans;' a. I; d: ?  B" w1 S
        }
    " q) W% h3 A* @. K; k9 `/ r. @+ q5 y. D( M4 D, M  g( ?, V
        return merge(query(i<<1,l,r),query(i<<1|1,l,r));
    3 [# N- X) X* @/ K9 ?8 w( Y}
    $ g& G; E/ a5 H7 F7 l
    ( t+ w& @0 a3 ]1 [" _! sint main() {: n% g3 Z" z* v" p* N, T; I
        cin>>l>>n;7 Y- m6 U. M7 g: D8 s7 V5 M" V! s$ W

    ' f& k$ t9 o- U" Q+ j5 j) F    build(1,1,l);
    $ |, O# f6 R) D    char c;% g* s: S1 z! {( M3 }7 i& {4 @' V1 q8 P
        int x,y;
    : \, \3 k% X7 [* z4 b/ j  g! [    while(n--) {
    ( i: A7 _3 A* u; }+ l+ |        scanf(" %c %d %d",&c,&x,&y);
    . t2 B2 Y8 l; P* Q1 l7 g5 i2 V; g        if(c == 'C') {! ]6 F: E' A9 U% ^
                modify(1,x,y);
    - m; u2 i7 n  Y; M8 q8 A( A        } else {
    - e5 z" d# W0 f* S            if(y-x+1< 8) {
    $ e, _8 @+ _+ h1 x* b4 ~2 R                printf("0\n");
    2 c- ]) T9 a& a) L                continue;
    . N& E- ?) f+ o* h; y- P            }
    5 W/ u! h# ]3 W0 ^            vector<int> ans = query(1,x,y);# s/ ^" D; X4 l* z, `0 Q* q( l
                printf("%d\n",ans[7]);
    0 M. s2 e, z' M        }4 L+ A# h, |7 b/ ]
        }
    & P2 z6 b( O7 E0 H$ k/ X/ u# [3 ^
    0 @1 n4 ~* |# S    return 0;
    6 n+ g0 E/ L/ n$ e) A6 p4 f* N. ]}; u5 d" k# g6 p. t0 [+ f

    + Z4 Z3 Z/ K8 @* Q* `! o2 O---------------------
    " T6 f! [, J# p% J作者:nka_kun
    3 u7 }6 E! e( k' V& g% G来源:CSDN 0 W$ c3 k& t5 s5 M. D

    4 w0 ]6 O6 w# ~1 }3 @) A& W0 r- {
    ! R- ~/ t. I2 o+ o2 W/ C
    6 `3 i1 r" I/ b% X" {
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2026-4-12 17:34 , Processed in 0.297946 second(s), 50 queries .

    回顶部