QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2326|回复: 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组决赛题解第九题9 ~6 T. `4 z3 `* W, D

    2 f* c; ~& t1 T9 b; H5 T

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

    思路: 区间第8大值,线段树在时间、空间都够了(蓝桥怎么会让手写主席树。。)5 e$ `( w, ]1 S* q
    每个节点存储它管辖的这个区间的前8大值,修改的时候暴力merge,单次修改复杂度log(n)*80 P% j, ~0 {8 |$ [2 [
    查询的时候返回含有8个值得list,并不断merge

    代码:

    & x5 G& R9 `' w9 \' a; X, P8 T
    #include<bits/stdc++.h>% l+ L' ?' R! R
    #define mem(a,b) memset(a,b,sizeof(a))  X, b! H3 f3 f& V9 h
    using namespace std;, L; H) m- m. Q3 `% O6 p# H( p
    typedef long long ll;
    ) a; X5 S4 S7 U2 ?const int inf = 0x3f3f3f3f;
    $ Q% v  Y4 L9 J+ A& _" iconst int maxn = 1e5+55555;1 u. A/ N& d+ M1 M4 e
    const ll mod = 998244353;  o* R; c! S8 m8 Q+ Q
    const double eps = 1e-7;- M, {) ^, [& a# |, ]$ d) B9 b
    ' R( Q8 `0 M/ l
    struct tree {
    ) h/ h' x8 p8 r- }    int l,r;
    0 D1 C" W- b( G; n0 s7 |0 [  _6 \    int p[10];
    8 j9 g# z5 e2 |( C8 b4 r} t[maxn<<2];% `8 }* b/ k9 d; t

    : k$ z0 y+ @  o3 m' v) qint l,n;% s9 T: p; S+ J% R) _9 ]

    5 S6 Z) v1 y1 X! V. uvoid build(int i,int l,int r) {
    ! m, m/ g: \, c* k( f5 D8 Z! W    t.l = l;9 J( z1 g3 O# K4 d) [
        t.r = r;. I2 d* c5 F& s" d9 ?& Y3 t. ?
        mem(t.p,0);- T* E. m4 D" x! t% |! G  H& U  Y4 r& F" Z

    ' n2 w" n; c! `7 D    if(l == r) return ;
    1 x* l% ^5 G* t" {8 r2 N    int mid = (l+r)>>1;
    3 f. n, j- t5 Y    build(i<<1,l,mid);
    ) V$ }; u- I% h7 U    build(i<<1|1,mid+1,r);
    - j8 g5 ^2 r1 B. G, g    return ;
    . x$ z* D8 ~, ~% _2 v: g: v0 n' {}6 N7 n) n2 c5 t

    ' X' |+ ]2 J8 U* Jvoid update(int i) {
    6 [2 g" I! g7 ?- h: [9 l" I1 K3 @    int cnt1 = 0,cnt2 = 0;
    ; u4 U. L, o2 L2 `+ [$ F; E6 N  J  z    for(int j = 0;j< 8;j++) {) q) a; X7 c& w) m. Y
            if(t[i<<1].p[cnt1]> t[i<<1|1].p[cnt2]) {# p: b, E0 F( V2 m
                t.p[j] = t[i<<1].p[cnt1];
    . ?$ p& m  T# I3 k' E1 J            cnt1++;
    . p* H6 G' V3 U' P        } else {
    $ z$ q+ K9 U( a: m3 N7 ~, k            t.p[j] = t[i<<1|1].p[cnt2];( R  R" V- D- T' q1 I5 m
                cnt2++;0 M: ]# n' f' ~5 ?! [
            }( N9 D0 R% W" H! N9 C5 N9 Q( e
        }! T3 g/ L0 i; W( r5 Y1 F
        return ;: m" k* v  ]! W/ c! ^
    }
    & N; [, `. G4 u: h4 a7 W
    ; q1 K/ w1 y- n1 ]/ p* X) p9 @void modify(int i,int pos,int val) {
    . M! i1 @) d: Y6 u    if(t.l> pos || t.r< pos) return ;& g9 V8 A  I, ~! v; d2 j
        if(t.l == t.r) {# q* ^$ M: e# d
            t.p[0] = val;
    + [# i% Q1 M8 h. I        return ;
    6 q  N4 I  ]9 h2 d    }
    4 c1 ^0 C2 [7 B- ~    modify(i<<1,pos,val);
    2 ~& E1 E% B' O- v0 w0 D    modify(i<<1|1,pos,val);, J, M. B0 n9 q# S5 s: J
        update(i);
    * z" V1 }6 C. E' Y2 J2 J" F$ [9 u    return ;
    # f+ t6 w8 Q5 }( V- e7 H}
    7 h" F) ~8 n* m9 `9 t; R1 X: n, {& _
    vector<int> merge(vector<int> ans1,vector<int> ans2) {+ x7 ^% k3 j& q1 M; A) l
        vector<int> ans;
    7 [2 ^3 Z' j; U( [4 _    int cnt1 = 0,cnt2 = 0;
    ' u' h4 E7 ^- q* S6 d    for(int j = 0;j< 8;j++) {3 i+ x, k" ~' g2 a
            if(ans1[cnt1]> ans2[cnt2]) {& T5 m6 h1 W2 u6 w7 F/ \
                ans.push_back(ans1[cnt1]);- s/ n+ `* o( `! _2 _5 S
                cnt1++;
      S* C; }$ F- T        } else {
    ' k6 _' E$ e6 W/ Z0 e* Q1 u9 v            ans.push_back(ans2[cnt2]);& w# f+ V! c- l; U) C. t
                cnt2++;* q! M3 Y: F: {* C6 y5 |: N! U9 N
            }. t9 X9 Z9 G4 d( C. V
        }
    + Z! g+ k+ p7 Q; V+ P    return ans;
    ' [$ }- I- r( Z  A}7 A: w" X" ^8 o0 n" D3 c
    ! q( v' M% A6 ]" l1 P4 j6 u
    vector<int> query(int i,int l,int r) {4 v( e4 s( E. a: C/ N$ @( ~
        vector<int> ans;
    1 E" v- Q- b/ C3 u# o    if(t.l> r||t.r< l) {
    6 c7 g' G% K' t2 H* l, ^- s        for(int j = 0;j< 8;j++) ans.push_back(0);1 _. x  e7 C" Z' b9 d9 T% C
            return ans;2 T& @0 a6 A3 P* G
        }
    # C5 ~! {+ B- l0 `0 W8 g% x
    + T# }) p+ N# B/ {    if(t.l>= l&&t.r<= r) {
    8 [7 k) m& k; E0 C2 H" }- B& M        for(int j = 0;j< 8;j++) ans.push_back(t.p[j]);
    / M8 D+ y" r" B' W6 Y. j% B        return ans;- }+ e) \$ d6 T6 @9 L' U
        }' L( k' I. b2 r& A% E# _- C

    + \6 }. H+ I- [4 o! ]    return merge(query(i<<1,l,r),query(i<<1|1,l,r));
    & |' U2 |8 }  y$ I}3 i5 I; W* f7 [
    6 d" r2 U4 A/ V! P2 e: x: p
    int main() {. S# t5 m$ B/ _
        cin>>l>>n;; D; u' u: s4 h2 y2 i
    6 z( n3 r9 m7 T8 f# W
        build(1,1,l);
    0 U3 p( C$ c9 s: w3 g& @    char c;( {  C$ j" L) Y$ v" y* Y
        int x,y;
    , @. q) Q5 k' ^8 s9 p/ Z1 ~% S    while(n--) {8 n: T7 M$ D6 L; B) o5 J0 q
            scanf(" %c %d %d",&c,&x,&y);, d' C. Y0 j/ a5 |6 V2 H
            if(c == 'C') {
      [; H/ r! e1 o$ J* T            modify(1,x,y);
    # y( w! K& B, I2 D        } else {
    8 d) T, V8 n. Q6 U2 T) h0 h            if(y-x+1< 8) {
    $ @6 K3 P* d2 V7 B) ~                printf("0\n");
    . ^& ]" E8 {. ?4 q+ ^                continue;
    + Q2 P0 f4 l: g) Q# Z$ z/ r  o* G$ q            }
    8 s0 l+ D0 H7 K  M; o+ h9 D2 B" [" b( I            vector<int> ans = query(1,x,y);
    . b) l1 p/ y; v& q9 [            printf("%d\n",ans[7]);. L3 y8 G" _5 t# q% b& N
            }
    + f5 N# c: g5 [) _5 T% k1 }% n    }
    " G' ^7 F% b0 w9 ^/ m( L# N% L4 U. c+ p5 N
        return 0;' [/ z9 M1 \1 D1 V
    }3 \- v9 W' m6 v  l

    ' ^1 A# W7 Z" O3 E--------------------- 9 B; p9 @$ w2 d5 g' V- ?. b
    作者:nka_kun - @8 ]8 @; X& G! x, U5 i  K( B% \
    来源:CSDN
    / M) P* K' `& K4 [( o
    . s+ j: A: W* u/ P# K6 T
    $ z+ b; r; g$ F  A6 \2 s: W' ^: r* L6 U" w/ z4 r! u
    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-8-1 11:36 , Processed in 0.411169 second(s), 51 queries .

    回顶部