首页 > 其他分享 >Hard Process

Hard Process

时间:2024-09-30 19:02:01浏览次数:7  
标签:Process 复杂度 Hard 个数 mid len int check

Hard Process(题面)
大意:给定一个长度为\(n(0<=n<=10^5)\)的序列,序列中只包含0或1,现有k次机会可以将0改为1,问,k次机会前最长连续1序列的长度并且输出这个序列(只需一个)。
解法:二分答案+前缀和

证二分答案的单调性:

先解释check函数:现有一个需要查询的长度len,从1开始直到n,遍历每一个长度为len的0的个数,如果个数小于等于k的话,那么这个长度就是可以满足的。
我们会发现,长度越长,包含0的个数理论上会更长,需要的次数理论上也就更多,所以就满足二分的单调性。

前缀和的作用:

check函数中需要遍历每一个长度为len的0的个数,复杂度就为\(O(n^2)\),显然是不能接受的。那么我们可以预处理出来从1到i所有0的个数,那么我们想要求出$l-r$0的个数,只需要用\(1-l\) 0的个数- \(1-(r-1)\) 0的个数即可求出。复杂度就会变成\(O(n)\)

复杂度:

二分的复杂度是\(O(log\) \(n)\),check函数的复杂度为\(O(n)\),总复杂度就是\(O(n log\) \(n)\)
code:

#include <iostream>
using namespace std;

int n, k, ans, z, y;
int a[300001], b[300001];

bool check(int len, int& z, int& y) {
	for(int i = 1 ; i + len - 1 <= n ; i ++) {
		int need = a[i + len - 1] - a[i - 1];
		if(need <= k) {
			z = i, y = i + len - 1;
			return true;
		}
	}
	return  false;
}

int main() {
	
	cin >> n >> k;
	for(int i = 1 ; i <= n ; i ++) {
		cin >> a[i];
		b[i] = a[i];
		a[i] = a[i - 1] + !(a[i]);
	} 
	int l = 0, r = 99999999;
	while(l < r) {
		int mid = (l + r + 1) / 2;
		int x = 0, c = 0;
		if(check(mid, x, c)) {
			ans = mid;
			z = x, y = c;
			l = mid;
		}else r = mid - 1;
	}
	cout << ans << '\n';
	for(int i = 1 ; i <= n ; i ++) {
		if(i == z) {
			for(int j = z ; j <= y ; j ++) {
				cout << 1 << ' '; 
			}
			i = y;
		}
		else cout << b[i] << ' ';
	}
}
/*
10 2
1 0 1 0 1 0 1 0 0 1
*/

标签:Process,复杂度,Hard,个数,mid,len,int,check
From: https://www.cnblogs.com/lghjl/p/18442334

相关文章

  • 【0335】Postgres内核之 auxiliary process(辅助进程)获取 PGPROC latch 所有权 (3)
    1.获取PGPROClatch所有权在【0333】Postgres内核之auxiliaryprocess(辅助进程)创建PGPROC一文中讲解了Auxiliaryprocess获取PGPROC的底层实现过程。在此基础上,本文将基于Postgres内核讲解获取该辅助进程latch所有权的源码实现。1.1latch关联PGPROC获取P......
  • 【0333】Postgres内核之 auxiliary process(辅助进程)创建 PGPROC
    1.auxiliaryprocess当我们是辅助进程(auxiliaryprocess)时,不会进行完整的InitPostgres初始化操作,但即使在辅助进程中,也有几件事需要被启动。这里第一件就是“创建一个PGPROC,以便我们能够使用LWLocks。在EXEC_BACKEND情形下,这一操作已由SubPostmasterMain()完......
  • INF80028 - Business Process Management
    INF80028- Business Process ManagementSemester2,2024Assignment2AnalysingandDesigningTo-BeBusinessProcess forSwinburneCaresFoundationAssignment2dueon Week12Friday18th Oct.at23:59 AEDST Assessment2 Value=40%Tobecompletedi......
  • 【Spring】扩展点EnvironmentPostProcessor实例详解
    1.概述转载并且补充:SpringBoot扩展点EnvironmentPostProcessor实例详解之前项目中用到了Apollo配置中心,对接Apollo配置中心后,配置中心的属性就可以在程序中使用了,那么这个是怎么实现的呢?配置中心的属性又是何时加载到程序中的呢?那么我们如果找到了这个是怎么实现的是否就......
  • show processlist和show full processlist说明
    showprocesslist和showfullprocesslistprocesslist命令的输出结果显示了有哪些线程在运行,不仅可以查看当前所有的连接数,还可以查看当前的连接状态帮助识别出有问题的查询语句等。如果是root帐号,能看到所有用户的当前连接。如果是其他普通帐号,则只能看到自己占用的连接。showp......
  • softirq和hardirq中断亲和度
    /proc/interrupts和/proc/softirqs两者是相互关联的,但它们各自记录的信息和作用有所不同,反映了硬中断和软中断的两个处理阶段。两者的关系:硬中断引发软中断:硬中断通常由外部设备(如网络卡、键盘等)触发,当CPU响应硬中断时,会暂时停止当前正在执行的任务,去处理该硬件中断。......
  • Light Bulbs (Hard Version) 题解
    提供一个非常另类的解法,没有异或哈希,没有建图,没有缩点和强连通分量,而是使用了并查集和线段树的算法。由于每个颜色恰好有两种,我们考虑把两个颜色的位置\(i,j\)变成一段区间\([i,j]\)(\(i<j\)),然后每个颜色就能用一段区间\([l,r]\)表示。根据题意,如果我们激活了一个区间\([l,......
  • ifream跟webview 嵌套orchard core的登录
    orchardcore默认的安全策略很高。所以要设置后台要开启ocrs跟安全program.cs要配置cookie可以跨域。`builder.Services.ConfigureApplicationCookie(options=>{options.Cookie.SameSite=SameSiteMode.None;options.Cookie.SecurePolicy=......
  • maven annotationProcessorPaths
    <plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>${maven-compiler-plugin.version}</version><configuration><annotat......
  • ECE-GY 6183 Real-Time Digital Signal Processing
    Real-Time Digital Signal Processing LabECE-GY 6183 / ECE-UY 4163Fall 2024This course is an introductiontothe real-time implementationofdigital signal processing (DSP) algorithms, with an emphasis on audio signal processing an......