【每日训练】2020/11/9(Splay ?rope大法好!、数论、构造补图)

整理的算法模板合集: ACM模板


1. 牛客Shuffle Cards

题目传送门
在这里插入图片描述

  • 首先分析数据范围

1 e 5 1e5 1e5,加上是区间移动,一看就是一个数据结构问题,区间问题一般用Splay解决,但是我只会treap…。但是我们有rope这个神器!

  • 然后来分析题意

题目大意:有n个数,m次操作,每次选择从x开始长度为y的数放到数组的最前面。问m次操作后的序列。直接用rope暴力跑啊!

rope讲解:

Rope大法(可持久化平衡树)

【可持久化线段树?!】rope史上最全详解

//#pragma GCC optimize("Ofast")
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<bitset>
#include<map>
#include<ext/rope>

#define debug(x) cout << x << "ok" << endl
typedef long long ll;
#define file freopen("1.in", "r", stdin);freopen("1.out", "w", stdout);
const int N = 2e5 + 7, M = 1e5 + 7, INF = 0x3f3f3f3f;

using namespace std;
using namespace __gnu_cxx;

ll read()
{
    ll 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, m, x, y;
rope<int>r;

int main()
{
    n = read(), m = read();
    for(int i = 1; i <= n; ++ i)
        r.push_back(i);
    while(m -- ){
        x = read(), y = read();
        r = r.substr(x - 1, y) + r.substr(0, x - 1) + r.substr(x + y - 1, n - x - y + 1);
    }
    for(int i = 0; i < n; ++ i){
        printf("%d%s", r[i], i == (n - 1) ? "\n" : " ");
    }
    return 0;
}

2.CF992B Nastya Studies Informatics

题目传送门

在这里插入图片描述
今天写了好几道分块没时间了,今天还满课,明天补…

3.CF990D Graph And Its Complement(构造补图)

题目传送门
在这里插入图片描述
啊,这,不会啊!
在这里插入图片描述

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <vector>
#include <ctime>
#include <cctype>
#include <bitset>
#include <utility>
#include <sstream>
#include <complex>
#include <iomanip>
#define inf 0x3f3f3f3f
typedef long long ll;
using namespace std;
int a,b,n,jg[1010][1010];
int main()
{
    cin>>n>>a>>b;
    if(n==1)
    {
        cout<<"YES\n0";
        return 0;
    }
    if(min(a,b)>1 || (n<=3 && max(a,b)==1))
    {
        cout<<"NO";
        return 0;
    }
    cout<<"YES\n";
    for(int i=1+max(a,b); i<=n; ++i)
        jg[i-1][i] = jg[i][i-1] = 1;
    for(int i=1; i<=n; i++)
    {
        for(int j=1; j<=n; ++j)
        {
            cout<<(i==j?0:jg[i][j]^(a<b));
        }
        cout<<endl;
    }
    return 0;
}
 
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 撸撸猫 设计师:设计师小姐姐 返回首页