QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2321|回复: 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组决赛题解第九题
    . k) c) \. W& H# P! P, u6 e
    & c! ^; H8 C# J: m8 t$ W7 E0 p/ l

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

    思路: 区间第8大值,线段树在时间、空间都够了(蓝桥怎么会让手写主席树。。)) V* v0 ^: q2 N7 {
    每个节点存储它管辖的这个区间的前8大值,修改的时候暴力merge,单次修改复杂度log(n)*8
    ( f/ X0 J4 r$ K& e# E+ t$ R查询的时候返回含有8个值得list,并不断merge

    代码:

    1 V# K6 |5 Y( Z' T4 a
    #include<bits/stdc++.h>
    9 g7 F& \* U/ |6 h#define mem(a,b) memset(a,b,sizeof(a))7 v  S* _* u9 u9 ^3 n6 v
    using namespace std;
    * o+ m: @8 a% c- E: t/ Y7 C; ~. ytypedef long long ll;& F! `0 S/ M3 x. z0 L7 _1 }
    const int inf = 0x3f3f3f3f;% Z: W/ b3 U8 s; V. u( q2 ^5 D' Q
    const int maxn = 1e5+55555;1 `% t6 @3 f: z; H: p* }) t
    const ll mod = 998244353;
    ) }0 x3 l( ~# l6 Dconst double eps = 1e-7;
    + C- q9 Q. m3 H+ H$ M
    ( r( g- }% w9 z: [2 |, T0 estruct tree {9 c4 V5 z) a8 V% E" o: a& \: C
        int l,r;
    2 J( r" j! u0 x# m; D9 @  J    int p[10];
    3 _% L0 G9 p) N. d- Z* I# I} t[maxn<<2];9 v; U2 t, e& ^& ~7 ~

    ! n% N, O* [. U6 h) Eint l,n;; _) L( u! g3 E% z  a0 ^2 z: v

    ( K9 v8 }7 z" V% O+ K3 K: rvoid build(int i,int l,int r) {
    ; E( u! i5 M$ q    t.l = l;" ~! |& V# O6 m1 H
        t.r = r;, z! g' U: \3 \0 t
        mem(t.p,0);8 X% ^! T, L" r! F2 W
    5 K8 ~8 V0 T; @6 l& L2 B* S
        if(l == r) return ;
    + Z( S8 e3 F) t+ b% J    int mid = (l+r)>>1;
    : L+ a& M- R' u* h; f% K) i    build(i<<1,l,mid);
    1 O! o. j2 h2 {/ ~2 D: W    build(i<<1|1,mid+1,r);7 T* U2 @1 v5 q7 @. K
        return ;$ j4 z5 b5 `6 u
    }6 C" [8 i$ d9 w9 U+ [7 q  g

    ( P, ]  o6 ~/ K! Xvoid update(int i) {7 |4 ^5 y! X! K: U& p( l" Y0 |
        int cnt1 = 0,cnt2 = 0;
    ' z" ]$ C0 k2 P5 P7 H    for(int j = 0;j< 8;j++) {0 v% [6 u7 L  C0 x, d+ D: B1 `
            if(t[i<<1].p[cnt1]> t[i<<1|1].p[cnt2]) {
    : ~7 Q0 g& a* k9 A4 U! c- |            t.p[j] = t[i<<1].p[cnt1];
    / V. ~$ R2 U! D            cnt1++;: Y. D2 D# Z; f) `7 _- u+ [
            } else {& U( g+ a: E+ F, v
                t.p[j] = t[i<<1|1].p[cnt2];: h3 x2 L' j' J! e; d0 ^
                cnt2++;0 b* d% t  q  c7 [" P" M
            }
    ) v' w3 y3 a* N# O! n. T6 ~    }
    8 A/ v0 B/ n* {    return ;/ Y( y& d9 ]* K: r# S( B$ ]
    }( L$ H$ @; m1 ?

    / D  F! r) f7 ^8 d) @void modify(int i,int pos,int val) {  k2 E, k* U, W9 d
        if(t.l> pos || t.r< pos) return ;
    6 e4 p4 X8 n& o, F9 ~% h4 z/ v! O% y    if(t.l == t.r) {
    5 g1 \+ Q6 K. N! B        t.p[0] = val;
    + \6 k% Q/ S+ j0 ?) K  {  P        return ;( k6 e2 f0 R+ n* ^2 w4 n! |6 A
        }
    6 x$ V3 |  s" g/ ]* a$ W7 b: z    modify(i<<1,pos,val);+ j& e; K( S7 e  T% `5 E8 u
        modify(i<<1|1,pos,val);5 U" g9 h+ P# ^; S# P0 a4 ^: ^
        update(i);6 K& Z8 H5 o" c. ]! A
        return ;6 D) F  N5 g& C1 w7 F0 o& S% H9 `+ J
    }' @; a# t9 X0 A! ?- z/ S
    : a" v1 B( _# _1 [
    vector<int> merge(vector<int> ans1,vector<int> ans2) {. F9 S) R, v( z% G! f# M# {$ f- c
        vector<int> ans;: K; A$ c- _' f+ m# q. @
        int cnt1 = 0,cnt2 = 0;
    - V0 M1 Z6 V" e& G& G. J    for(int j = 0;j< 8;j++) {
    5 l7 U9 }. {* m! X        if(ans1[cnt1]> ans2[cnt2]) {. S3 C2 U, `6 n6 \. T
                ans.push_back(ans1[cnt1]);8 \( S. H6 U( O8 L, S# s* T
                cnt1++;3 O3 |+ e5 R; j' K- q6 ^$ {
            } else {
    4 R1 T) _4 _* [  t- w            ans.push_back(ans2[cnt2]);
    0 j8 X3 a: S8 J# V2 o# J: c2 J- P$ ~            cnt2++;5 Q# o, H/ s. X3 b/ o$ o3 j' W3 @& q
            }
    4 |1 y9 r- n7 w4 N8 s: i( i    }
    * S6 t$ i1 D  g8 D    return ans;
    ' f) L) ]. e  G* f}6 {& d' A( {3 u4 o
    7 z! W  N9 ~  A- N  ?
    vector<int> query(int i,int l,int r) {! I, m' f& h  A, A: R
        vector<int> ans;
    8 E; F) P+ A, t) `' e7 A    if(t.l> r||t.r< l) {
    6 i0 l3 n( b: m" j        for(int j = 0;j< 8;j++) ans.push_back(0);3 x, D& T7 O9 W( P
            return ans;  y/ v, V/ R9 T
        }, D$ a3 y7 l1 ~" k
    + t# I4 ?6 e  v8 S1 G3 j
        if(t.l>= l&&t.r<= r) {
    3 a& J; `- i4 W) {5 \8 s        for(int j = 0;j< 8;j++) ans.push_back(t.p[j]);; p0 e- G+ _" X/ {; I0 R3 h1 [
            return ans;
    - V5 ?, a* `- y" b3 K( d    }
    ( y- q3 h% o/ h, c* i8 }1 T
    1 `6 m$ u1 p; N& V& K' L2 ^  Q    return merge(query(i<<1,l,r),query(i<<1|1,l,r));" C6 }$ ]( [) T4 o
    }
    ( M4 z, ^( ?  W5 f! N6 W* {6 y6 ^: I) X' w: U
    int main() {# w. a: E' J" J1 @
        cin>>l>>n;: X- X# E+ c) v) o# v
    - ~! \  C4 }  E
        build(1,1,l);
    # O9 k! w' R8 c! b' {; ~6 l    char c;. [4 m8 }0 N& U5 p5 @! L
        int x,y;% F$ |$ @/ d/ b  P. ~) s7 B
        while(n--) {6 h  }. H: r& T: l$ V
            scanf(" %c %d %d",&c,&x,&y);1 }5 |3 x- q; D  {$ r* K
            if(c == 'C') {  q: b- l9 q8 Z
                modify(1,x,y);5 m' W0 o( L& v" n# [' W! `
            } else {
    ! i+ Z" _( ]8 |  z5 B# h            if(y-x+1< 8) {1 }" s0 \0 n9 g+ x
                    printf("0\n");
    ( |3 s1 k8 p& I8 b                continue;
    9 V  q6 t- `$ S0 M            }
    3 j, ~2 z8 {) t5 v( K, A4 K* J            vector<int> ans = query(1,x,y);- c: B! y& p# q* J
                printf("%d\n",ans[7]);
    % j! n2 w) C4 B6 L        }
    , l/ ~* R3 v, @+ Q3 b6 L% m    }6 X5 G6 \1 h) C( C( J9 P

    : M7 h2 L, a3 N  d, A  o9 P" B    return 0;  t- y+ F) P) v9 t0 v
    }
    " m! [7 n# v) ~# A) u" s6 ?2 U$ N* k+ L5 m
    --------------------- 5 }$ `7 S/ J% B( w0 P
    作者:nka_kun
    ( M, d3 X" D8 z9 z- E; u来源:CSDN
    , L! l8 Y- B( z% ~: H  d/ b) x0 F# {4 J* ^( G7 Q- b3 D; o

    7 E6 Q3 y' z: x: M7 A7 T9 ~9 N! O1 P
    % ~2 u* @0 E' a4 N3 U0 N& Y; [. G
    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-7-31 08:05 , Processed in 0.387061 second(s), 54 queries .

    回顶部