首页 > 其他分享 >POI2009LYZ-Ice Skates

POI2009LYZ-Ice Skates

时间:2024-04-18 09:12:31浏览次数:22  
标签:val int tr mid Ice seg POI2009LYZ build Skates

POI #Year2009 #线段树 #Hall定理

考虑实际上是一个二分图匹配问题,那么这个二分图存在匹配当且仅对于 \(L\) 的任何子集右侧的度数和 \(\geq\) 左侧的

然后线段树维护左侧的区间最大和

// Author: xiaruize
const int N = 2e5 + 10;

int n, m, k, d;

struct segment_tree
{
#define ls p << 1
#define rs p << 1 | 1
	struct node
	{
		int mx, lmx, rmx, sum;
	} tr[N << 2];

	void pushup(int p)
	{
		tr[p].lmx = max(tr[ls].lmx, tr[ls].sum + tr[rs].lmx);
		tr[p].rmx = max(tr[rs].rmx, tr[rs].sum + tr[ls].rmx);
		tr[p].mx = max({tr[ls].mx, tr[rs].mx, tr[ls].rmx + tr[rs].lmx});
		tr[p].sum = tr[ls].sum + tr[rs].sum;
	}

	void build(int p, int l, int r)
	{
		if (l == r)
		{
			tr[p] = {-k, -k, -k, -k};
			return;
		}
		int mid = l + r >> 1;
		build(ls, l, mid);
		build(rs, mid + 1, r);
		pushup(p);
	}

	void update(int p, int l, int r, int x, int val)
	{
		if (l == r)
		{
			tr[p].sum += val;
			tr[p].mx += val;
			tr[p].lmx += val;
			tr[p].rmx += val;
			return;
		}
		int mid = l + r >> 1;
		if (x <= mid)
			update(ls, l, mid, x, val);
		else
			update(rs, mid + 1, r, x, val);
		pushup(p);
	}
} seg;

void solve()
{
	cin >> n >> m >> k >> d;
	seg.build(1, 1, n);
	rep(i, 1, m)
	{
		int r, x;
		cin >> r >> x;
		seg.update(1, 1, n, r, x);
		debug(seg.tr[1].mx);
		if (seg.tr[1].mx <= k * d)
			cout << "TAK" << endl;
		else
			cout << "NIE" << endl;
	}
}

#ifndef ONLINE_JUDGE
bool end_of_memory_use;
#endif

signed main()
{
	// freopen(".in","r",stdin);
	// freopen(".out","w",stdout);
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	int testcase = 1;
	// cin >> testcase;
	while (testcase--)
		solve();
#ifndef ONLINE_JUDGE
	cerr << "Memory use:" << (&end_of_memory_use - &start_of_memory_use) / 1024.0 / 1024.0 << "MiB" << endl;
	cerr << "Time use:" << (double)clock() / CLOCKS_PER_SEC * 1000.0 << "ms" << endl;
#endif
	return 0;
}

标签:val,int,tr,mid,Ice,seg,POI2009LYZ,build,Skates
From: https://www.cnblogs.com/xiaruize/p/18142217

相关文章

  • openGauss service子命令
    service子命令该子命令可用于对配置目录进行初始化,同时也可以实现启动和停止后台任务。配置目录初始化用户可通过gs_dbmindservicesetup子命令进行配置目录的初始化。该配置文件中可包括DBMind的配置文件、日志等内容。该目录中的部分文件说明:dbmind.conf:DBMind的参数配......
  • .Net6-利用IServiceProvider实现全局依赖注入
    需求背景:自定义类库程序中的类文件引用IService接口对象并实现依赖注入。1.修改应用程序Program.cs文件1varbuilder=WebApplication.CreateBuilder(args);2builder.Services.AddProgramService();345varapp=builder.Build();6InternalApp.ServiceProvider=a......
  • 将商用器件的spice模型导入到Cadence Virtuoso中仿真
    需要的文件和软件器件的SPICE网表文件(后缀为.cir)CadenceVirtuosoLinux端文本编辑器SPICE网表文件有的器件商家可能提供的模型是PSPICE。PSPICE只是CadenceSPB套件的仿真器而已,内核都是SPICE。下载好SPICE器件模型(.cir文件)之后,应该打开看一眼,熟悉一下网表文件的构成。如......
  • Provider HAL 和 Device HAL3
    2.CameraProviderHAL和CameraDevice HAL32.1谷歌的Framework层定义了四个接口来与Hal3进行交互:ICameraProvider,  ICameraDevice,  ICameraDeviceSession,  ICameraDeviceCallbackMTK的Hal3当中定义了四个接口的实例: CameraProvid......
  • 【chatgpt】IoCreateDevice和IoCreateSymbolicLink是两个重要的函数
    在Windows设备驱动程序开发中,IoCreateDevice和IoCreateSymbolicLink是两个重要的函数,用于创建设备对象和符号链接,它们的作用如下:IoCreateDevice:作用:创建一个设备对象,驱动程序使用设备对象来与系统和其他驱动程序进行通信。参数:需要提供设备扩展名和设备的类型、特征以及......
  • 解决 office2021 "你的许可证并非正版,你可能是盗版软件的受害者"
    问题描述:安装完office后,打开任意office软件,都会提示如下许可证问题:尝试过网上的各种方法都没用,后面发现是用的HEUKMSActivator版本太老了,新版本的HEUKMSActivator已经修复了这个问题。具体步骤如下:关闭所有office软件。下载最新版的HEUKMSActivator(https://gith......
  • Splice方法的图像化理解
    splice在英语中的意思是拼接,在实际的代码使用中,splice就在数组中起到了一个拼接的作用使用方法splice(x,y,a,b,c,...)其中x、y为数字,a、b、c为新添加的项,意思是从数组的第x项开始删除y项,并在其中添加a、b、c...,其中x、y必填,abc可不填图像理解现在让我们将splice方法想象成一......
  • error: code = Unimplemented desc = unknown service runtime.v1.RuntimeService"
    问题"commandfailed"err="failedtorunKubelet:validateserviceconnection:validateCRIv1runtimeAPIforendpointunix:///run/containerd/containerd.sock":rpcerror:code=Unimplementeddesc=unknownserviceruntime.v1.RuntimeSe......
  • [Microservices] Create and Deploy Microservices
    IBMCloudCodeEngineChallengesofself-hostingmicroservicesDeliberatedConfigurationandBuildManageInfrastructureDynamicScalingCommunicationandSecurityLoggingandMonitoringExample:DeployaPython-basedmicroserviceIBMCloudCodeEngineJu......
  • process scheduling (进程调度)& practice 1 process operation
    进程切换并发进程的切换并发进程中,一个进程在执行过程中可能被另一个进程替换占有CPU,这个过程称为“进程切换”是什么触发了进程切换?进程切换时要做什么?操作系统到底做了什么操作2中断技术中断是指程序执行过程中当发生某一个事件时,中止cpu上现行的程序的运行in......