QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2381|回复: 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组决赛题解第九题( C8 X9 `2 {; J
    7 C# p8 Q( `- M+ v# G2 B, `+ \

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

    思路: 区间第8大值,线段树在时间、空间都够了(蓝桥怎么会让手写主席树。。)
    2 R# }# J7 H" O2 t8 m, D$ k每个节点存储它管辖的这个区间的前8大值,修改的时候暴力merge,单次修改复杂度log(n)*86 D8 p' p: r2 [  N! I
    查询的时候返回含有8个值得list,并不断merge

    代码:

    - ?1 ]$ q* A" ]
    #include<bits/stdc++.h>
    + _# ]: G' l  K8 m$ R' z  L' K6 [4 g2 j#define mem(a,b) memset(a,b,sizeof(a))
    & v% f3 o5 H, E: n/ b; Fusing namespace std;
    * H% J8 K# k; v+ f' ~" S! Z0 Htypedef long long ll;
    % n# ^+ @- g3 m& I9 S( bconst int inf = 0x3f3f3f3f;1 q+ V* N! L6 V
    const int maxn = 1e5+55555;
    + S) v) r! t) uconst ll mod = 998244353;
    6 e# J" U- x; _* ?$ ?9 ?' X$ ^const double eps = 1e-7;$ J& P2 x# P3 F* p2 m
    " P) C" @8 Q: Q5 _) \7 K6 D! M7 ?8 G
    struct tree {
    # h/ ^( n* d# J4 q    int l,r;
    9 I  |% E/ Q7 S; `+ M8 J4 u4 r/ |4 S8 O    int p[10];" Y5 W  A% |/ D- K6 e
    } t[maxn<<2];" r7 I+ y5 I( }) G) U- Q$ l

    . ^# K0 c2 V' x  yint l,n;
    1 P, e0 [% n$ M+ W
    5 y& l' `# v* R& x8 C$ ]void build(int i,int l,int r) {% d, g( j2 ~. B4 W
        t.l = l;
    / f, ?4 J  q- F  W    t.r = r;
    " U5 N; Q  ^/ L. f+ _0 |: p    mem(t.p,0);
    / b5 \6 O  x# X/ q0 A4 G
    - A) D  o6 |0 Y: D9 f3 Y- B    if(l == r) return ;
    % _; }' Y  B" Q% |" W: k    int mid = (l+r)>>1;
    2 v) O8 @, t) K$ X    build(i<<1,l,mid);9 t3 `0 B6 C4 m  C6 C) }
        build(i<<1|1,mid+1,r);
      ~. u9 O5 E7 P  {* c7 L, M    return ;
    $ t5 R; S; h# v' s}
    & ]& Y7 n! }2 S% ?& s  u* ~. G& \9 b+ G$ {, o7 i$ c
    void update(int i) {
    8 V4 w$ {: Y# R    int cnt1 = 0,cnt2 = 0;: V( X+ [& Z! ?, @4 S+ @* J- N
        for(int j = 0;j< 8;j++) {  {6 _9 v7 n" E! l
            if(t[i<<1].p[cnt1]> t[i<<1|1].p[cnt2]) {
    2 ?2 m$ Q3 o, ~" ?+ G0 R            t.p[j] = t[i<<1].p[cnt1];. f( x6 @6 M% X% [! n8 m8 D
                cnt1++;
    5 w& g/ t* P) |& @" n: }        } else {
    ; V" N% S# x, i            t.p[j] = t[i<<1|1].p[cnt2];
    * H0 \& k( L6 J; q% [0 W6 q- q            cnt2++;
    + V; @) Y+ N1 a) h( G/ {- o. s  J        }
    6 M5 u# f+ f9 C6 {7 ^    }
    9 |6 p  ]2 f# Z3 Y7 u! N    return ;# i. \' P- [8 X5 k
    }
    4 i9 n* z& o7 A8 U: [8 L) i1 ]  T- Z( p/ l  \- [8 o
    void modify(int i,int pos,int val) {
    0 ]' `; ^1 N% O- |* |0 c    if(t.l> pos || t.r< pos) return ;* p- X( Z4 s  q( ~
        if(t.l == t.r) {6 Y3 r9 A& r& {. T0 y- r2 O" b+ P: U- j
            t.p[0] = val;0 @4 ?7 p: G. x
            return ;; W4 h& I$ Z# ?' t
        }
    0 h% I4 X! \# W- I) c/ k. _# G    modify(i<<1,pos,val);5 l: [1 q7 j1 i% X1 f6 w: [
        modify(i<<1|1,pos,val);4 o2 T) F  u  P  g
        update(i);: M5 |" A5 H! l  h
        return ;8 G+ }5 T/ n) l0 E
    }
    7 Z/ ]4 o2 w1 H8 M' M
    4 [9 O9 a; K$ jvector<int> merge(vector<int> ans1,vector<int> ans2) {
    * R0 z5 O( D/ U4 c+ K$ x    vector<int> ans;. k( c& @$ }+ @0 L# c, c2 u
        int cnt1 = 0,cnt2 = 0;
    3 E& I! R/ j4 y    for(int j = 0;j< 8;j++) {3 J5 c( K4 _4 e1 p' a1 {/ _) A' t
            if(ans1[cnt1]> ans2[cnt2]) {& P7 ~2 h1 A* K4 N
                ans.push_back(ans1[cnt1]);
    - ^. v+ D+ R' e% r, F            cnt1++;) Z, b9 U: i2 s3 d
            } else {- g0 U8 O% H) k3 l
                ans.push_back(ans2[cnt2]);* ?2 f' K7 I5 c+ B; k! A& O
                cnt2++;6 i1 C& j. o! y* S& P
            }! {0 O% P2 r* T
        }
    $ W' i$ p2 f3 e2 L4 p; C: Q    return ans;
    - P6 a3 @. i& }( K+ p}
    ) {5 v9 t( r$ u1 a# }& s8 {
    / _) `6 ~" I" b! f- ]7 U. L) g! Xvector<int> query(int i,int l,int r) {( i5 e. w5 t: E( l- U1 u
        vector<int> ans;/ V; m% h5 e6 c. t% o$ v
        if(t.l> r||t.r< l) {
    4 Q9 L- ~' Z: G- I0 y. X/ ]        for(int j = 0;j< 8;j++) ans.push_back(0);9 K, d. z: V; z/ C7 C4 [! f
            return ans;
    " i! ]- ]% ~( M    }
    + @; l/ [5 S/ Z4 n+ n; R1 _$ {9 e, R- N0 _3 @5 o# j
        if(t.l>= l&&t.r<= r) {
    + C: G- U; l3 g0 e; N6 m        for(int j = 0;j< 8;j++) ans.push_back(t.p[j]);" \& P$ x; m6 w5 k- v+ |& d, {9 t
            return ans;
    7 f% a2 I5 n% D$ [% U: g. j& `7 F    }0 ~$ k3 k/ V  }4 j2 J; l
    0 \( s2 x7 l2 ~+ i
        return merge(query(i<<1,l,r),query(i<<1|1,l,r));
    7 a$ M2 a5 k' F9 B$ ]% V}
    , h+ e% n0 Q0 s& g3 \/ @
    : Z  U- b. j6 h9 J9 |int main() {
    # b8 V: x; n% y. E2 f: B9 T    cin>>l>>n;  D( q8 z+ ]& @' `. o/ P+ d
    2 U1 q8 U% `, g/ w* H
        build(1,1,l);/ ~, E6 f: T# Y$ _6 [0 c. ~) g
        char c;" H$ u3 b! w, I% W& ^5 t5 r
        int x,y;
    ; v$ a, t5 b3 p* x' U" I: O    while(n--) {- }" ^9 R4 T' f' J/ \  W% d6 {. C
            scanf(" %c %d %d",&c,&x,&y);
    : a& h6 X7 t. x& i( Q" k1 P        if(c == 'C') {
      p# Y  m8 T# J            modify(1,x,y);6 C# G# D$ c, p1 k9 ^
            } else {' E/ i) C$ b6 g$ O" w/ |1 i! A
                if(y-x+1< 8) {( B* e9 E( {6 F, @; z$ N5 a) v
                    printf("0\n");! d6 m. T& J# c" J4 K$ t
                    continue;0 a+ x9 c( s1 V* Z
                }
    7 Y: v7 u4 A: i  E! Q! |            vector<int> ans = query(1,x,y);* B  g3 V& Q; V( T6 E8 X3 ^0 [
                printf("%d\n",ans[7]);0 S- N" x& L* ^
            }
    ' x2 w$ v4 m4 W9 N: ]3 B2 ~    }: @9 Y* j. \- i  k  D3 F$ g

    7 L  f* L) G$ v6 t    return 0;. a9 a- o, S: ?: L& t3 K9 U
    }# ^# h) h% D$ ~3 j6 b

    . D, ~9 s8 J% Q' z) E' y# g4 k---------------------
    7 n9 I! d; G4 H  ?作者:nka_kun 8 Y4 `+ X! r2 r+ d8 p( {+ l% S( E- J
    来源:CSDN , N. G) g3 B6 f& B: c$ h

    ( F* T8 u2 i3 f1 u
    # [# N9 u( e, D- s4 e) Z  _6 H1 W8 M/ G; S) l6 V! M: a
    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-9-27 14:28 , Processed in 0.456095 second(s), 51 queries .

    回顶部