zoukankan      html  css  js  c++  java
  • 线段树模板(HDU 6356 Glad You Came)

    题目:

    HDU 6356

    http://acm.hdu.edu.cn/showproblem.php?pid=6356

    很裸的线段树

    #include<bits/stdc++.h>
    #define fi first
    #define se second
    #define INF 0x3f3f3f3f
    #define fio ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
    #define pqueue priority_queue
    #define NEW(a,b) memset(a,b,sizeof(a))
    #define si(x) scanf("%lld",&x)
    #define lowbit(x) (x&(-x))
    #define lc (d<<1)
    #define rc (d<<1|1)
    #define eps 1e-9
    const double pi=4.0*atan(1.0);
    const double e=exp(1.0);
    const int maxn=1e7+8;
    typedef long long LL;
    typedef unsigned long long ULL;
    //typedef pair<LL,LL> P;
    const LL mod=1024*1024*1024;
    const ULL base=1e7+7;
    using namespace std;
    unsigned x,y,z,w;
    unsigned RNG(){
        x=x^(x<<11);
        x=x^(x>>4);
        x=x^(x<<5);
        x=x^(x>>14);
        w=x^(y^z);
        x=y;
        y=z;
        z=w;
        return z;
    }
    struct node{
        int l,r,mi,lz;
    }a[maxn];
    void build(int l,int r,int d){
        a[d].l=l;
        a[d].r=r;
        a[d].mi=a[d].lz=0;
        if(l!=r){
            int mid=(a[d].l+a[d].r)>>1;
            build(l,mid,lc);
            build(mid+1,r,rc);
        }
    }
    void add(int l,int r,int d,int x){
        if(l==a[d].l&&r==a[d].r){
            a[d].lz=max(x,a[d].lz);
            a[d].mi=max(x,a[d].mi);
            return ;
        }
        if(x<=a[d].mi){
            return ;
        }
        int mid=(a[d].l+a[d].r)>>1;
        if(a[d].lz!=0){
            add(a[d].l,mid,lc,a[d].lz);
            add(mid+1,a[d].r,rc,a[d].lz);
            a[d].lz=0;
        }
        if(l>mid){
            add(l,r,rc,x);
        }
        else if(r<=mid){
            add(l,r,lc,x);
        }
        else{
            add(l,mid,lc,x);
            add(mid+1,r,rc,x);
        }
        a[d].mi=min(a[lc].mi,a[rc].mi);
    }
    int query(int l,int r,int d){
        if(l==a[d].l&&r==a[d].r){
            return a[d].mi;
        }
        int mid=(a[d].l+a[d].r)>>1;
        if(a[d].lz!=0){
            add(a[d].l,mid,lc,a[d].lz);
            add(mid+1,a[d].r,rc,a[d].lz);
            a[d].lz=0;
        }
        if(l>mid){
            return query(l,r,rc);
        }
        else if(r<=mid){
            return query(l,r,lc);
        }
    }
    int main(){
        fio;
        int t;
        cin>>t;
        int n,m;
        while(t--){
            w=0;
            cin>>n>>m>>x>>y>>z;
            build(1,n,1);
            unsigned f1,f2,f3;
            LL l,r,v;
            for(int i=1;i<=m;i++){
                f1=RNG();
                f2=RNG();
                f3=RNG();
                l=min((f1%n)+1,(f2%n)+1);
                r=max((f1%n)+1,(f2%n)+1);
                v=f3%mod;
                add(l,r,1,v);
            }
            LL res=0;
            for(int i=1;i<=n;i++){
                res^=1ll*i*(query(i,i,1));
            }
            cout<<res<<endl;
        }
    }
  • 相关阅读:
    Python并行编程(七):线程同步之事件
    Python并行编程(六):线程同步之条件
    Python并行编程(五):线程同步之信号量
    Python并行编程(四):线程同步之RLock
    Python并行编程(三):线程同步之Lock
    UML关系总结——画uml图、流程图、软件结构图、类图、顺序图的方法
    2020,你好!
    字符串和多维数组
    排序算法
    查找技术
  • 原文地址:https://www.cnblogs.com/Profish/p/9456146.html
Copyright © 2011-2022 走看看