zoukankan      html  css  js  c++  java
  • HDU 6356 Glad You Came 2018 Multi-University Training Contest 5 (线段树)

    题目中没有明说会爆int和longlong 的精度,但是在RNG函数中不用unsigned int 会报精度,导致队友debug了很久...

    根据每次生成的l,r,v对区间更新m次,然后求 i*ai的异或和。挺裸的线段树,只要ai<v就更新ai。在线段树结点中维护区间最小值,每次更新时,如果区间最小值>=v,那么就不用更新了。

    #include<bits/stdc++.h>
    #define lson rt << 1
    #define rson rt << 1 | 1
    #define Lson l, m, lson
    #define Rson m + 1, r, rson
    using namespace std;
    typedef long long LL;
    typedef unsigned int UI;
    const int MOD = 1<<30;
    const int maxn = 1e5+5;
    UI X,Y,Z;
    
    LL mn[maxn<<2];
    void pushup(int rt) { mn[rt] = min(mn[lson],mn[rson]);}
    
    void build(int l,int r,int rt)
    {
        if(l==r) {
            mn[rt]=0;
            return;
        }
        int m =(l+r)>>1;
        build(Lson);
        build(Rson);
        pushup(rt);
    }
    
    void update(int L,int R,int l,int r,int rt,LL val)
    {
        if(mn[rt]>=val) return;
        if(l==r){
            mn[rt] = val;
            return ;
        }
        int m =(l+r)>>1;
        if(L<=m) update(L,R,Lson,val);
        if(R>m) update(L,R,Rson,val);
        pushup(rt);
    }
    
    LL query(int p,int l,int r,int rt)
    {
        if(l == r) return mn[rt];
        int m = (l+r)>>1;
        if(p<=m) return query(p,Lson);
        else return query(p,Rson);
    }
    
    UI gao()
    {
        X = X^(X<<11);
        X = X^(X>>4);
        X = X^(X<<5);
        X = X^(X>>14);
        UI W = X^(Y^Z);
        X = Y;
        Y = Z;
        Z = W;
        return Z;
    }
    
    int main()
    {
        #ifndef ONLINE_JUDGE
            freopen("in.txt","r",stdin);
            freopen("out.txt","w",stdout);
        #endif
        int T;
        UI N,M;
        scanf("%d",&T);
        while(T--){
            scanf("%u%u%u%u%u",&N,&M,&X,&Y,&Z);
            build(1,N,1);
            int l,r,v;
            for(int i=0;i<M;++i){
                l = gao()%N +1;
                r = gao()%N +1;
                v = gao()%MOD;
                if(l>r) swap(l,r);
                update(l,r,1,N,1,v);
            }
            LL ans=0;
            for(int i=1;i<=N;++i)  ans ^= i*query(i,1,N,1);
            printf("%lld
    ",ans);
        }    
        return 0;
    }
    为了更好的明天
  • 相关阅读:
    Spring学习笔记(一)IoC(XML部分)
    近期计划
    《番茄工作法图解》读后笔记
    第一篇随笔
    JavaScript 基本语法
    Eclipse启动之四 : Eclipse核心框架启动(百度空间迁移)
    Eclipse启动之三 : 启动器插件(百度空间迁移)
    Eclipse启动之二:Eclipse动态库(百度空间迁移)
    Eclipse启动之一:外壳程序(百度空间迁移)
    04SQL 查询当天,本月,本周的记录
  • 原文地址:https://www.cnblogs.com/xiuwenli/p/9435044.html
Copyright © 2011-2022 走看看