• Codeforces Round #401 (div.2)


    自己的号2000+了....临时找了一个1540的号,和一个大佬@ditoly一起打...

    这是大佬↓

    迟到了一下,过了十分钟才报名.....

    A.......

    B.你有n个数,对面也有n个数,两两对决!!!

    求最多大于对面的数多少场,大等于对面的数多少场。

    直接贪心

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    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;
    } 
    int s[1005],s2[1005];
    int n;
    
    int solve(int*a,int*b)
    {
        int l1=1,r1=n,l2=1,r2=n;int sum=0;
        while(l1<=r1)
        {
            if(a[l1]>b[l2]) {++l2;++l1;++sum;}
            else if(a[r1]>b[r2]){sum++;--r1;--r2;}
            else {sum+=a[l1]>b[r2];++l1;--r2;}
        }
        return sum;
    }
    
    int solve2(int *a,int*b)
    {
        int sum=n;int l1=1,r1=n,l2=1,r2=n;
        while(l1<=r1)
        {
            if(a[l1]>=b[l2]) {++l2;++l1;--sum;}
            else if(a[r1]>=b[r2]){sum--;--r1;--r2;}
            else {sum-=(a[l1]>=b[r2]);++l1;--r2;}    
        }
        return sum;
    }
    
    int main()
    {
       n=read();
       for(int i=1;i<=n;i++)
             s[i]=getchar()-'0';
       getchar();
       for(int i=1;i<=n;i++)
          s2[i]=getchar()-'0';        
       sort(s+1,s+n+1);
       sort(s2+1,s2+n+1);
       printf("%d
    %d",solve2(s2,s),solve(s2,s));
       return 0;
    }

    C

    给定一个矩阵,每次给一个lr,求第l到第r行有没有一列是不降的

    预处理每一个点最上到多少是不降的,直接暴力...

    这是ditoly写的

    #include<cstdio>
    #include<cstring>
    #include<vector>
    #include<algorithm>
    using namespace std;
    inline int read()
    {
        int x=0;char c;
        while((c=getchar())<'0'||c>'9');
        for(;c>='0'&&c<='9';c=getchar())x=(x<<3)+(x<<1)+c-'0';
        return x;
    }
    #define MN 100000
    #define N 131072
    #define INF 0x7FFFFFFF
    vector<int> v[MN+5];
    vector<pair<int,int> > q[MN+5];
    int t[N*2+5],ans[MN+5];
    void change(int k,int x){for(t[k+=N]=x;k>>=1;)t[k]=min(t[k<<1],t[(k<<1)+1]);}
    int main()
    {
        int n,m,k,i,j;
        n=read();m=read();
        for(i=0;i<=m;++i)v[0].push_back(INF);
        for(i=1;i<=n;++i)v[i].push_back(0);
        for(i=1;i<=n;++i)for(j=1;j<=m;++j)v[i].push_back(read());
        for(k=read(),i=0;i<k;++i)j=read(),q[read()].push_back(make_pair(j,i));
        memset(t,127,sizeof(t));
        for(i=1;i<=n;++i)
        {
            for(j=1;j<=m;++j)if(v[i][j]<v[i-1][j])change(j,i);
            for(j=0;j<q[i].size();++j)ans[q[i][j].second]=(t[1]<=q[i][j].first);
        }
        for(i=0;i<k;++i)puts(ans[i]?"Yes":"No");
    }

    d

    给n个字符串,求最少删去多少个字符可以让这些串按照字典序排列。

    从最后往前,每个都删到比后一个小为止

    这个也是ditoly写的。

    #include<cstdio>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    #define MN 500000
    #define INF 0x7FFFFFFF
    string s[MN+5];
    int L[MN+5];
    int C(int x,int y){return y<=L[x]?s[x][y]:0;}
    void solve(int l,int r,int p)
    {
        int i,j,mn=INF;
        for(i=r;i>=l;--i)
        {
            if(C(i,p)>mn)L[i]=p-1;
            mn=min(mn,C(i,p));
        }
        for(i=l;i<=r;i=j)
        {
            for(j=i;j<=r&&C(i,p)==C(j,p);++j);
            if(C(i,p))solve(i,j-1,p+1);
        } 
    }
    int main()
    {
        int n,i,j;
        cin>>n;
        for(i=1;i<=n;++i)
        {
            cin>>s[i];
            L[i]=s[i].size()-1;
        }
        solve(1,n,1);
        for(i=1;i<=n;++i,puts(""))for(j=0;j<=L[i];++j)putchar(s[i][j]);
    }

    e

    n个环形,每个有a,b,h  如果bj<=b[i]&&b[j]>a[i] 那么可以把j叠到i上面  求最大的 西格玛 h

    按照b排序,然后离散a,建线段树,加速dp就可以了。

    这个是我写的...

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #define N 262144
    #define ll long long
    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;
    } 
    int n;
    struct tower{
        int a,b,h;
    }s[500005];
    int l[500005];
    
    ll T[2*N+5];
    
    void renew(int x,ll ad)
    {
        x+=N;T[x]=max(T[x],ad);
        for(x>>=1;x;x>>=1)
            T[x]=max(T[x<<1],T[(x<<1)+1]);    
    }
    
    ll query(int l,int r)
    {
        if(r==0) return 0;
        ll sum=0;
        for(l+=N-1,r+=N+1;l^r^1;l>>=1,r>>=1)
        {
            if(~l&1) sum=max(sum,T[l+1]);
            if( r&1) sum=max(sum,T[r-1]);    
        }
        return sum;
    }
    
    bool cmp(tower x,tower y)
    {
        return x.b>y.b||(x.b==y.b&&x.a>y.a);
    }
    
    int main()
    {
       n=read();
       for(int i=1;i<=n;i++)
       {
           s[i].a=read();s[i].b=read();
           s[i].h=read();
           l[i<<1]=s[i].a;l[(i<<1)-1]=s[i].b;    
       }
       sort(s+1,s+n+1,cmp);
       sort(l+1,l+n*2+1);
       int j=0;
       for(int i=1;i<=n*2;i++)
          if(l[i]!=l[i-1])
             l[++j]=l[i];
       for(int i=1;i<=n;i++)
       {
            s[i].a=lower_bound(l+1,l+j+1,s[i].a)-l;
            s[i].b=lower_bound(l+1,l+j+1,s[i].b)-l;    
        }
       for(int i=1;i<=n;i++)
       {
            ll x=query(1,s[i].b-1);
            renew(s[i].a,x+(ll)s[i].h);
       }
       printf("%I64d
    ",query(1,j));
       return 0;
    }
    

    当时的场景还原

    我:您切c啊 我做一做ab

    ditoly:吼吧

    我去做a   瞬间卡壳了一下  然后打了个表

    ditoly:这比赛有毒吧 一点都不照顾pascal选手

    我:法克我a wa了(然后发现写错了一个字符)

    ditoly:你在干什么啊(然后a了c)

    我:我a掉b了  我d你e吧

    ditoly:我d把,我乱写一个

    我:我会e了,我去写一写。

    (过了一下):woc 没开ll  wa了 这不稳健啊

    ditoly:你干什么啊   我才是稳健选手啊(a了d)

    调了调  我:貌似a大的排前面啊  交不交啊

    ditoly:交啊 反正都被你弄成这样了 (wa了三次惨遭暴d)

    我:哇 居然pp了  中毒啊啊啊

    ditoly:哎(叹气)

    我:我们去x人吧

    ditoly:看了好久 没x点啊

    我:我学到了很多姿势啊  比如贴一个不调用的筛法在上面做模板啊  还有 if(a==0) cout<<0; else if(a==1) cout<<1; 之类的姿势啊

    ditoly:哈哈哈哈哈哈哈哈

    最后:

    ditoly:哎 两个人都打不过别人  这rank1是谁啊  

    同学:学军中学的许先有吧

    我:害怕

    感想:我好菜啊 ditoly无敌强

  • 相关阅读:
    使用binlog恢复数据
    Xtrabackup增量差量备份
    解压腾讯DB冷备的xb文件
    mysqldump
    xtrabackup备份选项
    MySQL的各种日志
    MySQL的事务相关概念
    LVS(dr)+keepalived
    MeasureSpec学习
    网络通信机制:Socket、TCP/IP、HTTP
  • 原文地址:https://www.cnblogs.com/FallDream/p/codeforces401.html
Copyright © 2020-2023  润新知