QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2260|回复: 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组决赛题解第九题/ Y0 k7 F" R. N5 S0 m8 X

    % J6 D& L; h) Z: X2 q# \

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

    思路: 区间第8大值,线段树在时间、空间都够了(蓝桥怎么会让手写主席树。。)/ ^! V  o9 P  l% r0 t/ a. P
    每个节点存储它管辖的这个区间的前8大值,修改的时候暴力merge,单次修改复杂度log(n)*8; ~0 l+ R% K$ j# h3 Q
    查询的时候返回含有8个值得list,并不断merge

    代码:

    # S- q8 r: {; z/ u$ d  N
    #include<bits/stdc++.h>9 C7 i& F% n) ]9 F8 N& z2 Q* y9 M
    #define mem(a,b) memset(a,b,sizeof(a))! i% H, o$ A2 x" s# H
    using namespace std;
    8 l, C) D# H& `6 etypedef long long ll;
    ' L( k; g* o# ?const int inf = 0x3f3f3f3f;: x2 L* ~( D3 r! B* Z4 l' O( [+ O5 ^
    const int maxn = 1e5+55555;3 R7 u3 A& A1 Z
    const ll mod = 998244353;6 d- T5 l$ I/ S) v# V
    const double eps = 1e-7;, O+ U+ ], c( T. z" r; N+ J
    , Q& U# e  A" ]; U
    struct tree {
    " Y9 [+ P" |. m3 {# A2 ]; x; F    int l,r;; e  }- O% [9 ~, y' m5 X
        int p[10];
    - A- D. K" ?! E! g# u8 A! _+ p} t[maxn<<2];: O$ k) D% Z( H2 ~" M  h$ v% N

    ( `7 x/ |& \- D$ B0 e6 Mint l,n;
    , X  `7 |: N7 l8 k1 n6 m. m0 o! m6 G, U" m! M
    void build(int i,int l,int r) {
    : V! i$ z7 _0 T: E+ E$ E" l7 j0 m    t.l = l;
    " P1 Z, T! r5 p    t.r = r;
    4 @; \4 ~8 K% v    mem(t.p,0);! Q" y- J& |0 f. H% d% ~/ s' q2 r

    ; B& C& p$ g* r" F' Z# x    if(l == r) return ;) X- Q  A, E# T! c% R
        int mid = (l+r)>>1;
      w8 a0 v+ A; B1 v: G8 G    build(i<<1,l,mid);3 j* s/ ?" F, c4 x% ]9 m
        build(i<<1|1,mid+1,r);/ @7 j. z. F0 X& L
        return ;0 c9 e  Z$ o7 M. x" w
    }
    ( |# j+ q. a) B4 y$ K# p: V
    ) J3 q5 f3 H5 ovoid update(int i) {7 z/ Z/ `0 D  w" T: d% K- A
        int cnt1 = 0,cnt2 = 0;
    2 d9 |. o) ^* u4 z0 ?6 b" F) o- E    for(int j = 0;j< 8;j++) {
    & s1 M2 q( Z# n8 _& ?/ ]: U        if(t[i<<1].p[cnt1]> t[i<<1|1].p[cnt2]) {! a9 V8 Y& U  q; C( E
                t.p[j] = t[i<<1].p[cnt1];5 c- b6 I7 G+ V+ q
                cnt1++;
    + {) h/ [$ ~! J$ z/ R6 T        } else {
    0 E+ S  [. ]! |: P/ C; U. L* @: {            t.p[j] = t[i<<1|1].p[cnt2];/ T) L, g5 K5 P% [+ L; J
                cnt2++;
    2 j* ]2 i5 `7 B) _; r        }) ?" l+ h) a/ a- Z- A
        }
    $ G' l  a6 X4 w: Q+ @, a    return ;
    9 i  G1 ?! v4 |& N2 q( x0 C1 R8 z}
    & g, ^: c/ N7 m8 Q
    / [+ ]) D( W* M$ c9 Y; `. fvoid modify(int i,int pos,int val) {
    - N2 L0 o2 c" b3 u" W    if(t.l> pos || t.r< pos) return ;; ]* `" b) T8 |- `* v
        if(t.l == t.r) {
    + H* @4 L) N4 ~# E5 s        t.p[0] = val;( b$ F- R5 d# q2 z1 g6 N
            return ;
    & w) n' J5 E7 r4 A    }
    & \, A/ o. L( ^% e4 ]+ p+ ^0 T* j8 V    modify(i<<1,pos,val);
    1 f. p4 c, ~) i5 ~! _6 K( [    modify(i<<1|1,pos,val);
    # ~; Q9 v& C1 b: }5 b8 Q2 S' S    update(i);1 j7 m* {7 F% C+ t4 z# I7 f( G9 X9 r( L
        return ;% v0 i! D7 U) o$ Q' h4 \* {
    }  A7 w/ i% i; d6 Y2 I5 r8 D9 O: x

    $ O7 d% h$ g- `* @9 O$ H2 kvector<int> merge(vector<int> ans1,vector<int> ans2) {9 r. W! e+ @/ j! |. v
        vector<int> ans;
    4 K* C4 H, N& s0 a    int cnt1 = 0,cnt2 = 0;' A/ D$ {3 d4 T2 p+ L$ E
        for(int j = 0;j< 8;j++) {
    1 O2 j  a" B$ s' p% H        if(ans1[cnt1]> ans2[cnt2]) {
    9 P3 t/ U) N: k5 f            ans.push_back(ans1[cnt1]);
    8 m3 L8 v: \* u' N8 T            cnt1++;7 s9 N8 a9 t: }4 Y. K+ S1 L" t
            } else {4 v7 B  v5 d& y. U6 s
                ans.push_back(ans2[cnt2]);; F$ a$ Y: E9 b
                cnt2++;5 U, `- L4 M+ Y1 {" }- u
            }0 Y  }0 p- @; _3 Q2 R. I$ G" H
        }4 ]7 O" B9 K$ }' x! p* ^% y
        return ans;1 o( L  N7 r* E  f2 z4 D) H5 v" [
    }5 j( A8 P( F1 X% I: U9 `) M
    8 ]8 X! K( r' I; L9 S6 Z) U
    vector<int> query(int i,int l,int r) {
    % L. K3 E4 _# F( d$ c2 {8 U    vector<int> ans;4 `$ M1 {  U8 M8 `6 L! q& z
        if(t.l> r||t.r< l) {/ M7 n) _! t$ U. l# E: y2 h8 d( @5 d
            for(int j = 0;j< 8;j++) ans.push_back(0);6 `5 N1 _: z8 ^
            return ans;1 I: V  V; c6 r$ h$ b( O7 e$ P* f5 H
        }6 d& `4 l8 o- I

    ! j) P, ]. S5 `$ e' ]    if(t.l>= l&&t.r<= r) {
    3 {: f3 o% ~9 {% N        for(int j = 0;j< 8;j++) ans.push_back(t.p[j]);
    / I+ |3 o$ Y, c4 l3 Z! w7 w        return ans;! Y$ G# v, b( b8 g! a
        }. K7 `! C1 t( R# k) @
    $ ^1 {# w' O7 o+ Q8 F$ v' V. E
        return merge(query(i<<1,l,r),query(i<<1|1,l,r));7 T% @3 T' E4 a% _, Q0 i# ]
    }
    ! j" ^* g% D- g- O4 h: E8 m1 B9 t( }$ O
    int main() {
    - R7 T) f' J0 G, s    cin>>l>>n;
    6 K: r, K) P9 u' `+ K( ^- e9 k( J! o9 H- @( q+ ]
        build(1,1,l);
      m) O" e- I( X. x0 M0 G    char c;
    & [' P% v' [2 `! H8 S    int x,y;
    7 s. h* e9 a  P: Z9 K+ _    while(n--) {
    ' ?* c1 C7 N. }  P! e0 P  u; i& c        scanf(" %c %d %d",&c,&x,&y);  F( s5 Y* N* u  d
            if(c == 'C') {
    + I  \5 y% S) r3 C! }) R" t            modify(1,x,y);: t" }( Q) p7 G/ u: ]$ b
            } else {
    & G4 p# ]# V! L. R& t! }9 y            if(y-x+1< 8) {
    5 S3 n5 c3 X. w' w                printf("0\n");
    3 {! \; g9 L5 v4 I/ W; C/ b" G                continue;  U1 P# L; T6 e  O$ ]( U
                }7 H: ?3 ~) q# o; X8 N
                vector<int> ans = query(1,x,y);
    . G( W4 N9 G" f2 K8 V. i9 o+ k            printf("%d\n",ans[7]);' G0 E) b8 ^* j- C- n
            }& G/ `# o) l6 l) \1 C
        }
    5 N- I! D  {$ r+ b0 B$ {
    + Q3 t$ u1 ^" t( Q  ]    return 0;# l& b; g* k8 R0 b3 W% \
    }/ l5 e& {; P* K. j

    6 Z. D. f$ `6 q$ V6 w! e---------------------
    6 o) y! ^$ e, n9 R. x$ y. }) S作者:nka_kun
      H0 L: z1 R$ s5 H- F7 `( M& \: x来源:CSDN
    4 ?  ?2 D- o- \- u( R  C; p# H# w1 Y) u2 ~) Z: Q. m4 C, U! z
    1 K, H* C7 o* _0 N7 F1 Y0 N
    + g9 i; v$ U) Q  l9 ?6 g) t' N
    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-5-28 17:11 , Processed in 0.367531 second(s), 51 queries .

    回顶部