zoukankan      html  css  js  c++  java
  • 【bzoj4534】基础排序算法练习题

    练习基础排序(笑

    鏼爷论文题,写法看论文。

    s.lower_bound(l)比lower_bound(s.begin(),s.end(),l)快了不知道多少。。。。改完还是擦着时限过的。

    #include<bits/stdc++.h>
    #define maxn 1505
      
    using namespace std;
      
    inline int read(){
        int x=0,f=1;char ch=getchar();
        while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
        while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
        return x*f;
    }
      
    set<int>s;
    int n,m,Q;
    int a[maxn],b[maxn],c[maxn];
      
    struct node{
        int x,id;
    }h[maxn];
      
    bool cmp(node A,node B){
        if(A.x==B.x)return A.id<B.id;
        return A.x<B.x;
    }
      
    void downsort(int l,int r){
        if(s.empty())return;
        set<int>::iterator it=s.lower_bound(l);
        while(l<=*it&&*it<r){
            int x=*it;s.erase(x);
            swap(a[x],a[x+1]);
            if(x>1){
                if(a[x-1]<a[x]){if(!s.count(x-1))s.insert(x-1);}
                else{if(s.count(x-1))s.erase(x-1);}
            }
            if(x+1<n){
                if(a[x+1]<a[x+2]){if(!s.count(x+1))s.insert(x+1);}
                else{if(s.count(x+1))s.erase(x+1);}
            }
            if(s.empty())break;
            it=s.lower_bound(l);
        }
    }
      
    struct Segment_Tree{
        int l,r,minv,addv;
    }Tree[maxn<<2];
      
    void pushup(int o){
        Tree[o].minv=min(Tree[o<<1].minv,Tree[o<<1|1].minv);
    }
      
    void build(int o,int l,int r){
        Tree[o].l=l;Tree[o].r=r;Tree[o].addv=0;Tree[o].minv=0;
        if(l==r){
            Tree[o].minv=0;
            return;
        }
        int mid=l+r>>1;
        build(o<<1,l,mid);
        build(o<<1|1,mid+1,r);
        pushup(o);
    }
      
    void pushdown(int o){
        if(Tree[o].addv){
            Tree[o<<1].addv+=Tree[o].addv;Tree[o<<1|1].addv+=Tree[o].addv;
            Tree[o<<1].minv+=Tree[o].addv;Tree[o<<1|1].minv+=Tree[o].addv;
            Tree[o].addv=0;
        }
    }
      
    void update(int o,int x,int y,int v){
        int l=Tree[o].l,r=Tree[o].r;
        if(x<=l&&r<=y){
            Tree[o].addv+=v;
            Tree[o].minv+=v;
            return;
        }
        int mid=l+r>>1;
        pushdown(o);
        if(x<=mid)update(o<<1,x,y,v);
        if(y>mid)update(o<<1|1,x,y,v);
        pushup(o);
    }
      
    struct ques{
        int f1,f2;
    }q[1000005];
      
    int main(){
        n=read();m=read();Q=read();
        for(int i=1;i<=n;++i)a[i]=i;
        for(int i=1;i<n;++i)s.insert(i);
        int f1,f2;
        for(int i=1;i<=m;++i){
            q[i].f1=read();q[i].f2=read();
        }
        for(int i=m;i;--i)downsort(q[i].f1,q[i].f2);
        for(int i=1;i<=n;++i)c[a[i]]=i;
        for(int i=1;i<=Q;++i){
            for(int j=1;j<=n;++j)h[j].x=read(),h[j].id=j;
            sort(h+1,h+n+1,cmp);
            for(int j=1;j<=n;++j)b[j]=h[j].id;
            build(1,1,n);int flag=1;
            for(int k=n;k>=2;--k){
                update(1,b[k],n,-1);
                update(1,c[k],n,1);
                if(Tree[1].minv<0){
                    flag=0;break;
                }
            }
            if(flag)puts("AC");else puts("WA");
        }
        return 0;
    }
  • 相关阅读:
    ABAP接口用法
    监听textarea数值变化
    The first step in solving any problem is recognizing there is one.
    Wrinkles should merely indicate where smiles have been.
    God made relatives.Thank God we can choose our friends.
    Home is where your heart is
    ABAP跳转屏幕
    Python 工具包 werkzeug 初探
    atom通过remote ftp同步本地文件到远程主机的方法
    Mongodb学习笔记一
  • 原文地址:https://www.cnblogs.com/illya/p/7647169.html
Copyright © 2011-2022 走看看