首页 > 其他分享 >bnds 8.28

bnds 8.28

时间:2024-08-28 18:26:40浏览次数:3  
标签:cnt ch int mid len bnds fgcd 8.28

csp 模拟赛。

A.

暴力枚举就行。

B.

中序遍历,然后就变为了给定一个序列 \(p\),求最少修改几次能让 \(p\) 变的单调递增,并且满足 \(p_i - p_j \ge i - j (i > j)\),变换一下就是 \(p_i - i \ge p_j - j\),所以中序遍历完了之后 \(p_i\) 减去 \(i\),后答案即为 \(ans - lis\)。

#include<bits/stdc++.h>
#define int long long
using namespace std;

const int N = 1e6 + 7;
int a[N];
int p[N];
int cnt;
int ch[N][2];
void dfs(int u) {
    if(ch[u][0]) dfs(ch[u][0]);
    p[++ cnt] = a[u] - cnt;
    if(ch[u][1]) dfs(ch[u][1]);
}
struct node {
    int val, id;
}e[N];
int b[N];
signed main() {
    int n;
    cin >> n;
    for(int i = 1; i <= n; i ++) {
        cin >> a[i];
    }
    for(int i = 2; i <= n; i ++) {
        int x, y;
        cin >> x >> y;
        ch[x][y] = i;
    }
    dfs(1); 
    int len = 0;
    for(int i = 1; i <= n; i ++) {
    	if(p[i] >= b[len]) {
    		b[++ len] = p[i];
		}
		else {
			int j = lower_bound(b + 1, b + len + 1, p[i]) - b;
			b[j] = p[i];
		}
	}
	cout << n - len << endl;
}

C.

二分长度 \(l\),st 表维护区间 gcd 和区间最小值,时间复杂度 \(O(nlogn)\)

#include<bits/stdc++.h>
using namespace std;

const int N = 5e5 + 500;
int a[N];
int fgcd[N][32], rmin[N][32];
int gcd(int x, int y)
{
	while(y)
	{
		x%=y;
		swap(x,y);
	}
	return x;
}
int getgcd(int l, int r) {
    int k = log2(r - l + 1);
    return gcd(fgcd[l][k], fgcd[r - (1 << k) + 1][k]);
}
int n;
int getmin(int l, int r) {
    int k = log2(r - l + 1);
    return min(rmin[l][k], rmin[r - (1 << k) + 1][k]);
}
int check(int l) {
    for(int i = 1; i <= n - l; i ++) {
        if(getgcd(i, i + l) % getmin(i, i + l) == 0	) {
            return 1;
        }
    }
    return 0;
}
int main() {
    memset(rmin, 0x3f, sizeof rmin);
    
    cin >> n;
    for(int i = 1; i <= n; i ++) {
        cin >> a[i];
        fgcd[i][0] = rmin[i][0] = a[i];
    }
    for(int j = 1; j < 23; j ++) {
        for(int i = 1; i <= n - (1 << (j - 1)); i ++) {
            fgcd[i][j] = gcd(fgcd[i][j - 1], fgcd[i + (1 << (j - 1))][j - 1]);
        }
    }
//    
    for(int j = 1; j < 23; j ++) {
        for(int i = 1; i <= n - (1 << (j - 1)); i ++) {
            rmin[i][j] = min(rmin[i][j - 1], rmin[i + (1 << (j - 1))][j - 1]);
        }
    }
    int l = 0, r = n;
    int ans;
    while(l <= r) {
        int mid = l + r >> 1;
        if(check(mid)) {
            l = mid + 1;
            ans = mid;
        }
        else {
            r = mid - 1;
        }
    }
    vector<int> v;
    int cnt = 0;
    for(int i = 1; i <= n - ans; i ++) {
        if(getgcd(i, i + ans) % getmin(i, i + ans) == 0	) {
            cnt ++;
            v.push_back(i);
        }
    }
    cout << cnt << " " << ans << endl;
    for(int i = 0; i < cnt; i ++) cout << v[i] << " ";
}

标签:cnt,ch,int,mid,len,bnds,fgcd,8.28
From: https://www.cnblogs.com/wyyqwq/p/18385310

相关文章

  • bnds 8.26
    P3117枚举矩形上边界和下边界\(i,j\),然后枚举每一列\(y\),且必须当前列上有\(h\)牛,然后向右枚举直到遇到有g牛的列,更新最大值。注意要离散化一下坐标,再处理一下二维前缀和,时间复杂度\(O(n^3)\)。P3118状压dp,设\(f_i\)表示当前集合为\(i\)时,要连续看多久电影,然后枚举......
  • bnds 8.25
    P3072因为空洞部分不是很好处理,所以考虑绕着外面搜一圈,所以从最外面的草垛的上一个点开始搜,遇到草就让\(ans\)加1,如果不是草就继续往外面搜,然后剪一下枝,如果一个不是草的点四周八个格子都不是草,那就不往下搜。P3073向周围四个点连一条边权为高度差的绝对值的边,然后最小生成......
  • bnds 8.27
    P3120朴素dp\(dp_{i,j}\)表示从\((1,1)\)出发到\((i,j)\)的方案数,有\(O(rc)\)的转移,总时间复杂度\(O(r^2c^2)\),通过不了。优化设\(sums\)为\((1,1)\)到\((i-1,j-1)\)的方案数和,\(sumd\)为\((1,1)\)到\((i-1,j-1)\)中,最后一个颜色为\(a[i][......
  • 8.28 模拟赛
    比赛复盘浏览所有题后发现所有题都是普及难度。A。数据范围这么小,暴力DP就行。不对\(10^{40}\)的答案……要高精度!!尝试了vector写高精乘发现异常简单。B。一年前我就能不看题解独立切。很快写完了。我清晰地记着分数加分数时分子分母要开__int128。C。又是小\({\Omega......
  • BNDS 2024/4/6模拟赛题解
    T1方程描述给出非负整数\(N\),统计不定方程\(X+Y^2+Z^3=N\)的非负整数解\((X,Y,Z)\)的数量。输入输入数据,包含一个非负整数\(N\)。输出输出数据,包含一个非负整数表示解的数量。数据范围40%的数据,\(N<=10000\)60%的数据,\(N<=10^8\)100%的数据,\(N<=10^{16}\)分析......
  • 8.28-9.3学习总结博客八:数据工程与系统部署
    博客题目:学习总结八:数据工程与系统部署实践内容概要:了解数据工程的基本概念和核心技术,学习如何将学到的技能应用于实际项目中,并了解数据处理系统的设计和部署。学习资源:推荐的数据工程、系统部署和项目实践的教程、实践资源和学习资料。实践内容:通过针对实际项目的数据处理和系统......
  • lombok1.18.28无法在jdk21环境使用
    java:java.lang.NoSuchFieldError:Classcom.sun.tools.javac.tree.JCTree$JCImportdoesnothavememberfield'com.sun.tools.javac.tree.JCTreequalid'目前lombok在jdk21版本有缺陷关联问题https://github.com/projectlombok/lombok/issues/3393......
  • 8.28 A 星人是一种 OI 很强的生物
    Mahjong找到可以通过以下两种操作,使得长度为\(N\)、元素之和为\(M\)的数列\(A\)全为\(0\)的\(A\)的个数,再取模\(998244353\)。在\(A\)中选一个元素,将其减去\(K\)。在\(A\)中选取长度为\(K\)的子串,子串中每个元素减去\(1\)。tag:组合数学搞笑题,我忘了插......
  • 闲话8.28
    好好好,今晚九点半才想起来写闲话。今天上午搬宿舍了。今天下午2:20才让我们从宿舍出门,估计想让我们多睡会了属于是......
  • 2023.8.28
    A长为\(n=2^k-1\)的纸条,编号为\([0,n-1)\),将纸条对折\(k\)次(每次将右边翻转至左边下面),记形成的序列为\(\{a_n\}\).\(m\)次询问,给定\(l,r\)求解:\[F(l,r)=a_l+a_{l+1}\oplusa_{l+2}+a_{l+3}\oplusa_{l+4}+\dotsa_r\]若\(l\)为偶数,那么先计算\(+\),否则先计算\(\o......