QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2237|回复: 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组决赛题解第九题4 B& Z0 g$ w  w  x9 |
    ' K* O' @: j2 i0 n9 x. `: K# t" Q

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

    思路: 区间第8大值,线段树在时间、空间都够了(蓝桥怎么会让手写主席树。。)
    5 _: Y4 h% h$ a3 c' r. o+ y每个节点存储它管辖的这个区间的前8大值,修改的时候暴力merge,单次修改复杂度log(n)*8
    9 m( l4 o9 o" _' h& _查询的时候返回含有8个值得list,并不断merge

    代码:


    5 w" I- \- d& O5 W9 F" E' s#include<bits/stdc++.h>
    $ ^7 A& ~2 H) a. |7 O1 I#define mem(a,b) memset(a,b,sizeof(a))
    7 @9 q+ X, G8 v; Q) [/ J2 v1 ^$ Cusing namespace std;
    0 f& c: H" B% ^6 P' t4 I1 `* Ttypedef long long ll;* O* h8 X9 L- ~0 |( c/ @, N, R5 ]
    const int inf = 0x3f3f3f3f;
    * u" N2 _. m/ F" D' ?0 Y5 _const int maxn = 1e5+55555;
    : f3 a: K! S) j: u' o1 aconst ll mod = 998244353;
    , b9 R4 u) }( F: s7 G' G3 Dconst double eps = 1e-7;& X6 O( n3 ^6 \. _. `

    & ]: y4 ~1 _+ `  T- K) ^struct tree {+ c0 Q8 ^( S7 X7 ?7 [0 g, Y& V
        int l,r;, a, C( o: R' _, S  q- S
        int p[10];
    # O! ]7 Y/ D0 z7 f0 ?} t[maxn<<2];9 _6 @2 g- I0 s( j0 g1 p; T

      R# `/ `3 n9 v5 N( N( q  [int l,n;- C8 p6 W& Y7 i/ y6 ^. H/ }

    # O' s: A7 R. [9 I/ T+ F" C1 P8 Mvoid build(int i,int l,int r) {
    / K( m, u7 P3 N; V2 w! ]    t.l = l;
    . E5 A( a6 l6 d, G" Q    t.r = r;
    : {8 W; w1 v7 a1 C    mem(t.p,0);$ V9 c& e- X. e5 @+ {8 }( d9 v, \
    / x2 ]9 m7 k+ Y1 E  G
        if(l == r) return ;
    4 n. S$ y, m9 k, i    int mid = (l+r)>>1;' g4 w' Q0 }( u9 t: [
        build(i<<1,l,mid);
    ) r, ?9 x0 \2 n    build(i<<1|1,mid+1,r);% ^) ]; _) I5 F& X! O
        return ;
    , w7 i  ^4 V; f6 {1 ]* Z}' ]' G- ]5 O( U8 e5 z" k3 q$ M
    9 @- z% H+ |& F$ Z5 Z% E1 n
    void update(int i) {% s1 W6 t. |# m3 x
        int cnt1 = 0,cnt2 = 0;/ O* \5 e$ v- C. z
        for(int j = 0;j< 8;j++) {
    # E5 k* L1 u2 `7 i* p        if(t[i<<1].p[cnt1]> t[i<<1|1].p[cnt2]) {
    / G, o3 x; b, t* ~6 W            t.p[j] = t[i<<1].p[cnt1];
    & E, @7 E; O: u; \. V7 X; C            cnt1++;
    8 h: b, C7 W/ m- L        } else {
    ) x& K2 g( O) v3 V; @& `0 \5 j            t.p[j] = t[i<<1|1].p[cnt2];9 f$ p2 z6 P- Q/ w% T  e
                cnt2++;5 ?0 R6 p# r; n: j  y
            }
    ' l+ M! R' r  V5 h    }
    6 @0 R8 i: Y2 C) e$ f$ N, w8 n    return ;
    8 L- [1 H& ^( |+ o$ d" U}
    8 c6 H+ r) J6 A3 V2 B3 V, X  S1 W. H2 }1 q7 X
    void modify(int i,int pos,int val) {, Z4 x& J7 m' z3 u
        if(t.l> pos || t.r< pos) return ;
    # O# Y: v6 i+ n# B    if(t.l == t.r) {& \8 u9 y+ \; n" V
            t.p[0] = val;
    3 o% _2 ]: a- ]3 X& O) ?        return ;! S1 C( X" c# K8 r2 k% Q3 ?& t% n
        }1 |' g. w* [4 ]/ f
        modify(i<<1,pos,val);) \' L" `; d- ?3 d& H
        modify(i<<1|1,pos,val);* A# J) b: c; \; r
        update(i);
    2 l; _1 P/ E! S1 v6 j    return ;7 _; w' z5 G: C$ R% H
    }
    4 @  E4 K9 ]2 z1 P$ t
    6 B# e& W1 _/ H% j9 V. g5 lvector<int> merge(vector<int> ans1,vector<int> ans2) {: d, X# a. q4 T7 w9 [8 Y8 k
        vector<int> ans;# y: Y2 n+ g6 `% P, |5 J  _, [
        int cnt1 = 0,cnt2 = 0;( o5 ?  P: W+ l+ `" P5 _
        for(int j = 0;j< 8;j++) {. L3 M6 N% Z* d) o. u7 c
            if(ans1[cnt1]> ans2[cnt2]) {
    * u: }$ T; F* X% A7 s) k            ans.push_back(ans1[cnt1]);5 ^! m, [/ x, T9 @. b  Y/ u
                cnt1++;- \% F& a, ~# F) x& }
            } else {
    . l: U2 d  d" L5 Y2 G% R! Y% y# u            ans.push_back(ans2[cnt2]);8 u8 ^! Y( x) K, c3 C
                cnt2++;
    ( i: o- f+ R  K; e0 K0 H        }
    % R6 C  A* ~% _) u# H- q' E" [    }9 e. l. n8 ^% N* m
        return ans;
    1 F: I) J) M- }: q* {7 l}
    ' a2 l1 J! K9 v; l8 I1 b) e2 l% y0 L& @9 h+ m
    vector<int> query(int i,int l,int r) {+ j4 ?/ W* U9 O) Q0 f7 s
        vector<int> ans;
    7 f* E, R$ D" e, Q0 ^    if(t.l> r||t.r< l) {
      H* e$ M; y( o3 w. F        for(int j = 0;j< 8;j++) ans.push_back(0);
    $ t) t+ E( [) P: L$ S, |        return ans;7 ]  l( j' J1 U0 F0 F$ R* X8 ?
        }6 l+ g, J6 Q2 Q$ a7 c' E8 S

    : z/ I4 j2 v- L) E    if(t.l>= l&&t.r<= r) {
    + U2 ?1 n( W; m) G        for(int j = 0;j< 8;j++) ans.push_back(t.p[j]);1 ^6 j2 m3 D/ _5 a% Z# y5 g% y
            return ans;
    " _) ?; j( z6 {5 a$ N    }" n+ b! ^% b7 k4 R" F

    . f4 F& I9 `3 O1 r5 E1 Y    return merge(query(i<<1,l,r),query(i<<1|1,l,r));
    8 k3 i/ c( [- e* b2 U- h: c2 b7 ~, E}+ b9 v1 t% w3 b7 j6 P# D& ~

    0 V8 [' G/ ]+ F2 p+ c. Lint main() {& B! t( H4 `% G
        cin>>l>>n;
    0 q, p3 f, d& h' a
    ) _% x2 o& M' X4 E3 D& V    build(1,1,l);
    1 F4 ~/ b, h: I( [& @- n9 v    char c;
    8 X  ^0 B9 j$ R0 j. Z    int x,y;
    + B) C1 Q5 Q6 F* Z  ^" X    while(n--) {
    # t' l/ u( O" b        scanf(" %c %d %d",&c,&x,&y);( A$ V* a& ^! O3 D3 U2 |
            if(c == 'C') {
    6 X3 @% Q  b( ]' x- P, u2 q6 U            modify(1,x,y);
    + L" ]' n5 n" Y' }6 K- }        } else {
    ; ?# z* d+ I& B  l            if(y-x+1< 8) {' k0 s; Z9 q4 W+ H  a8 r
                    printf("0\n");9 k) v# m+ ]3 a' _! e! `( o& T1 b
                    continue;
    7 U. [) Z7 f/ e; D. ~# h            }
    . {- }0 ~6 `) e# l- j7 ]8 l+ W            vector<int> ans = query(1,x,y);
    $ S, e3 Y  J/ D$ ?! v            printf("%d\n",ans[7]);& e+ E0 l% N5 w4 ]2 e
            }& N8 K" ~; l) q* N7 d1 `
        }* l$ _) l4 W& P4 f; A% |

    " H% `9 O5 U. j; e$ N    return 0;
    6 I4 s$ ?6 A9 o3 x% R}
    2 I) _) ~4 n( \4 n" |# M/ v$ s' G7 l* L+ P
    --------------------- 6 G) ?+ {5 [$ }6 L
    作者:nka_kun - e* A0 @6 d9 [2 u; O6 ~, _$ {
    来源:CSDN $ Y8 U* F# V0 A8 b4 V* J, }- z

    # ?" e% g! h: L- f1 A, C2 l) x# C' B$ d0 Z9 b6 P: b" T% H' K0 J

    7 E+ c3 P) F/ E" v
    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-16 21:01 , Processed in 0.412662 second(s), 51 queries .

    回顶部