首页 > 其他分享 >CF514D R2D2 and Droid Army(二分,ST表)

CF514D R2D2 and Droid Army(二分,ST表)

时间:2024-02-29 10:33:54浏览次数:22  
标签:二分 Droid Army R2D2 ST include check

传送门

解题思路

直接二分能干掉的人数,然后check函数枚举所有区间,因为 m 很小,所以可以用 m 个ST表预处理每个区间对应每个属性的最大值。
一是需要注意二分的写法,而是注意check(0)时候的特判。

AC代码

#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<queue>
#include<set>
#include<map>
#include<vector>
#include<iomanip>
#include<ctime>
#include<stack>
using namespace std;
inline int read(){
	int x=0,f=1;char c=getchar();
	while(!(c>='0'&&c<='9')) {if(c=='-') f=-1;c=getchar();}
	while(c>='0'&&c<='9') {x=x*10+c-'0';c=getchar();}
	return x*f;
}
const int maxn=2e5+5;
int n,m,k,a[maxn][6],d[6][maxn][20],ans[6],res[6];
int query(int id,int l,int r){
	int x=log2(r-l+1);
	return max(d[id][l][x],d[id][r-(1<<x)+1][x]);
}
bool check(int x){
	if(x==0) return 1;
	for(int i=1;i<=n-x+1;i++){
		int r=i+x-1,sum=0;
		for(int j=1;j<=m;j++){
			res[j]=query(j,i,r);
			sum+=res[j];
		}
		if(sum<=k){
			for(int j=1;j<=m;j++) ans[j]=res[j];
			return 1;
		}
	}
	return 0;
}
int main()
{
	n=read(),m=read(),k=read();
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			d[j][i][0]=a[i][j]=read();
		}
	}
	for(int id=1;id<=m;id++){
		for(int len=1;(1<<len)<=n;len++){
			for(int i=1;i+(1<<len)-1<=n;i++){
				d[id][i][len]=max(d[id][i][len-1],d[id][i+(1<<(len-1))][len-1]);
			}
		}
	}
	int l=0,r=n;
	while(l<=r){
		int mid=(l+r)/2;
		if(check(mid)) l=mid+1;
		else r=mid-1;
	}
	for(int i=1;i<=m;i++) cout<<ans[i]<<' ';
    return 0;
}

标签:二分,Droid,Army,R2D2,ST,include,check
From: https://www.cnblogs.com/yinyuqin/p/18042881

相关文章

  • 为什么iOS包比Android包大 flutter
    由于Android系统已经内置了Skia,所以Flutter在打包APK(Android应用安装包)时,不需要再将Skia打入APK中,但iOS系统并未内置Skia,所以构建iPA时,也必须将Skia一起打包 安卓1.在debug模式下,so库打入了x86_64、x86、arm64-v8a,总共22.28M2.在release模式下,so库只有armeabi-v7a,总共3.4......
  • 高通Android平台上,与regulator相关的几个概念和属性解释
    bypass_count      用于记录硬件是否绕过了电压调节器直接从电池或其他电源获取电力。consumers: 消费者指的是依赖于某个regulator提供电源的硬件模块或驱动程序。每一个使用regulator来调节电压的设备都是一个消费者。enable:指对regulator......
  • 2.16 Android 手机端学习
    publicclassAccountAdapterextendsBaseAdapter{Contextcontext;List<AccountBean>mDatas;LayoutInflaterinflater;intyear,month,day;publicAccountAdapter(Contextcontext,List<AccountBean>mDatas){this.context=......
  • 2.17 Android 学习开发
    importandroidx.annotation.NonNull;importandroidx.annotation.Nullable;importandroidx.fragment.app.Fragment;importandroidx.fragment.app.FragmentManager;importandroidx.fragment.app.FragmentPagerAdapter;importorg.jetbrains.annotations.NotNull;importja......
  • 2.19 Android 练习
    packagecom.zhen.accountbook;importandroid.content.Context;importandroid.content.Intent;importandroid.content.SharedPreferences;importandroid.text.method.HideReturnsTransformationMethod;importandroid.text.method.PasswordTransformationMethod;importan......
  • 已有Android项目接入有方yfb101错误,应用不停自动重启
    最近在接入有方信息的yfb101签字板,在按照demo导入所有数据和信息之后,却发现无法打开指纹设备,一直报错usbpermission没有。经过反复对比和新建项目进行比较,发现是因为cpu架构问题,因为有方的和之前的架构不一样,之前的在app/build.gradle下面限定了ndk{abiF......
  • android 混淆规则作用,Android代码混淆详解
    一、混淆的意义混淆代码并不是让代码无法被反编译,而是将代码中的类、方法、变量等信息进行重命名,把它们改成一些毫无意义的名字,同时也可以移除未被使用的类、方法、变量等。所以直观的看,通过混淆可以提高程序的安全性,增加逆向工程的难度,同时也有效缩减了apk的体积。总结如下:1、......
  • Android权限警告(not in privapp-permissions whitelist)
    1.现象模块使用了Settings.Global之后,单编模块push到手机里面重启,发现手机卡在开机logo界面,开不了机2.抓取logcat看log打印会发现如下图片中的打印,主要的关键词为Privilegedpermissionsnotinprivapp-permissionswhitelist二.查找源码定位问题(Q的代码)文件路径PermissionM......
  • Android Compose开发
    目录好处入门Composable布局其他组件列表verticalScroll延迟列表内容内边距性能修饰符偏移量requiredSize滚动添加间距SpacerButtonContext文字图片TextField重组状态提升viewmodel互相调用AndroidView项目学习其他text加一个背景paddingzIndexLaunchedEffectDisposableEffectpa......
  • Android 《设置全屏隐藏状态栏》
    @OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);//全屏去状态栏(在setContentView之前)requestWindowFeature(Window.FEATURE_NO_TITLE);getWindow().addFlags(WindowManager.La......