1057. Stack

本文介绍了一种使用树状数组和二分查找解决动态数据流中位数问题的方法。通过维护一个特殊的数据结构——树状数组,该算法可以在O(logN)时间内完成插入、删除操作,并利用二分查找快速确定中位数的位置。

题目限定数的范围N<=100000

关键点:构建树状数组可以求解前n个数的和

由此push和pop时要维护树状数组,当需要求解median时,使用二分法

由此总的算法复杂度为O(N*logN+N*logn*logN)=O(N*logN*logN)

// 1057. Stack (30).cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <stdio.h>
#include <string.h>

const int N = 100003;
int ind[N];
int data[N];
int vol[N];
int ssize;

int lowbit(int x){
	return x & (-x);
}

void update(int pos, int inc){
	while(pos <= N){
		ind[pos] += inc;
		pos += lowbit(pos);
	}
}

int sum(int pos){
	int ret = 0;
	while(pos > 0){
		ret += ind[pos];
		pos -= lowbit(pos);
	}
	return ret;
}

//binarySearch the minimum value x that sum(x) = keyValue(the ascend sorting index of median)
int binarySearch(int low, int high, int keyValue){
	while(low <= high){
		int mid = (low + high) / 2;
		int tmpSum = sum(mid);
		if(keyValue <= tmpSum)
			high = mid - 1;
		else
			low = mid + 1;
	}
	return low;
}

int main(){
	int cas;
	scanf("%d", &cas);
	memset(ind, 0, sizeof(ind));
	memset(vol, 0, sizeof(vol));
	char cmd[13];
	ssize = 0;
	while(cas--){
		scanf("%s", cmd);
		if(cmd[1] == 'u'){
			int tmp;
			scanf("%d", &tmp);
			data[ssize] = tmp;
			vol[tmp]++;
			update(tmp, 1);
			ssize++;
		}
		else if(cmd[1] == 'o'){
			if(ssize == 0)
				printf("Invalid\n");
			else{
				update(data[--ssize], -1);
				printf("%d\n", data[ssize]);
			}
		}
		else{
			if(ssize == 0)
				printf("Invalid\n");
			else{
				int keyValue = (ssize & 0x01) ? (ssize + 1) / 2 : (ssize / 2);
				int ans = binarySearch(1, N, keyValue);
				printf("%d\n", ans);
			}	
		}
	}
	return 0;
}



!ENTRY org.eclipse.core.resources 2 10035 2025-12-24 16:20:04.645 !MESSAGE The workspace exited with unsaved changes in the previous session; refreshing workspace to recover changes. !ENTRY org.eclipse.osgi 4 0 2025-12-24 16:20:04.680 !MESSAGE An error occurred while automatically activating bundle org.eclipse.core.resources (54). !STACK 0 org.osgi.framework.BundleException: Exception in org.eclipse.core.resources.ResourcesPlugin.start() of bundle org.eclipse.core.resources. at org.eclipse.osgi.internal.framework.BundleContextImpl.startActivator(BundleContextImpl.java:854) at org.eclipse.osgi.internal.framework.BundleContextImpl.start(BundleContextImpl.java:775) at org.eclipse.osgi.internal.framework.EquinoxBundle.startWorker0(EquinoxBundle.java:1057) at org.eclipse.osgi.internal.framework.EquinoxBundle$EquinoxModule.startWorker(EquinoxBundle.java:387) at org.eclipse.osgi.container.Module.doStart(Module.java:639) at org.eclipse.osgi.container.Module.start(Module.java:498) at org.eclipse.osgi.framework.util.SecureAction.start(SecureAction.java:528) at org.eclipse.osgi.internal.hooks.EclipseLazyStarter.postFindLocalClass(EclipseLazyStarter.java:122) at org.eclipse.osgi.internal.loader.classpath.ClasspathManager.findLocalClass(ClasspathManager.java:620) at org.eclipse.osgi.internal.loader.ModuleClassLoader.findLocalClass(ModuleClassLoader.java:348) at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:414) at org.eclipse.osgi.internal.loader.sources.SingleSourcePackage.loadClass(SingleSourcePackage.java:41) at org.eclipse.osgi.internal.loader.BundleLoader.findClass0(BundleLoader.java:516) at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:434) at org.eclipse.osgi.internal.loader.ModuleClassLoader.loadClass(ModuleClassLoader.java:174) at java.base/java.lang.ClassLoader.loadClass(Unknown Source) at org.jkiss.dbeaver.core.DesktopPlatform.initialize(DesktopPlatform.java:136) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.base/java.lang.reflect.Method.invoke(Unknown Source) at org.jkiss.dbeaver.utils.RuntimeUtils.injectComponentReferences(RuntimeUtils.java:708) at org.jkiss.dbeaver.utils.RuntimeUtils.getBundleService(RuntimeUtils.java:680) at org.jkiss.dbeaver.runtime.DBWorkbench.getApplicationWorkbench(DBWorkbench.java:45) at org.jkiss.dbeaver.runtime.DBWorkbench.getPlatform(DBWorkbench.java:51) at org.jkiss.dbeaver.utils.SystemVariablesResolver.getWorkspacePath(SystemVariablesResolver.java:99) at org.jkiss.dbeaver.utils.SystemVariablesResolver.get(SystemVariablesResolver.java:66) at org.jkiss.dbeaver.utils.GeneralUtils.replaceVariables(GeneralUtils.java:553) at org.jkiss.dbeaver.utils.GeneralUtils.replaceVariables(GeneralUtils.java:526) at org.jkiss.dbeaver.ui.app.standalone.DBeaverApplication.initDebugWriter(DBeaverApplication.java:728) at org.jkiss.dbeaver.ui.app.standalone.DBeaverApplication.start(DBeaverApplication.java:243) at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:208) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:143) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:109) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:439) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:271) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.base/java.lang.reflect.Method.invoke(Unknown Source) at org.jkiss.dbeaver.launcher.DBeaverLauncher.invokeFramework(DBeaverLauncher.java:650) at org.jkiss.dbeaver.launcher.DBeaverLauncher.basicRun(DBeaverLauncher.java:610) at org.jkiss.dbeaver.launcher.DBeaverLauncher.run(DBeaverLauncher.java:1461) Caused by: org.eclipse.core.internal.dtree.ObjectNotFoundException: Tree element '/General/Scripts/mes/Utils.sql' not found. at org.eclipse.core.internal.dtree.AbstractDataTree.handleNotFound(AbstractDataTree.java:183) at org.eclipse.core.internal.dtree.DeltaDataTree.getData(DeltaDataTree.java:572) at org.eclipse.core.internal.dtree.DataDeltaNode.asBackwardDelta(DataDeltaNode.java:54) at org.eclipse.core.internal.dtree.NoDataDeltaNode.asBackwardDelta(NoDataDeltaNode.java:63) at org.eclipse.core.internal.dtree.NoDataDeltaNode.asBackwardDelta(NoDataDeltaNode.java:63) at org.eclipse.core.internal.dtree.NoDataDeltaNode.asBackwardDelta(NoDataDeltaNode.java:63) at org.eclipse.core.internal.dtree.DataDeltaNode.asBackwardDelta(DataDeltaNode.java:51) at org.eclipse.core.internal.dtree.DeltaDataTree.asBackwardDelta(DeltaDataTree.java:96) at org.eclipse.core.internal.dtree.DeltaDataTree.reroot(DeltaDataTree.java:809) at org.eclipse.core.internal.dtree.DeltaDataTree.reroot(DeltaDataTree.java:808) at org.eclipse.core.internal.dtree.DeltaDataTree.reroot(DeltaDataTree.java:808) at org.eclipse.core.internal.dtree.DeltaDataTree.reroot(DeltaDataTree.java:808) at org.eclipse.core.internal.dtree.DeltaDataTree.reroot(DeltaDataTree.java:808) at org.eclipse.core.internal.dtree.DeltaDataTree.reroot(DeltaDataTree.java:808) at org.eclipse.core.internal.dtree.DeltaDataTree.reroot(DeltaDataTree.java:808) at org.eclipse.core.internal.dtree.DeltaDataTree.reroot(DeltaDataTree.java:808) at org.eclipse.core.internal.dtree.DeltaDataTree.reroot(DeltaDataTree.java:808) at org.eclipse.core.internal.dtree.DeltaDataTree.reroot(DeltaDataTree.java:785) at org.eclipse.core.internal.watson.ElementTree.immutable(ElementTree.java:540) at org.eclipse.core.internal.resources.SaveManager.restore(SaveManager.java:797) at org.eclipse.core.internal.resources.SaveManager.startup(SaveManager.java:1616) at org.eclipse.core.internal.resources.Workspace.startup(Workspace.java:2618) at org.eclipse.core.internal.resources.Workspace.open(Workspace.java:2319) at org.eclipse.core.resources.ResourcesPlugin$WorkspaceInitCustomizer.addingService(ResourcesPlugin.java:591) at org.eclipse.core.resources.ResourcesPlugin$WorkspaceInitCustomizer.addingService(ResourcesPlugin.java:1) at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:947) at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:1) at org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:257) at org.osgi.util.tracker.AbstractTracked.trackInitial(AbstractTracked.java:184) at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:324) at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:267) at org.eclipse.core.resources.ResourcesPlugin.start(ResourcesPlugin.java:565) at org.eclipse.osgi.internal.framework.BundleContextImpl$2.run(BundleContextImpl.java:833) at org.eclipse.osgi.internal.framework.BundleContextImpl$2.run(BundleContextImpl.java:1) at java.base/java.security.AccessController.doPrivileged(Unknown Source) at org.eclipse.osgi.internal.framework.BundleContextImpl.startActivator(BundleContextImpl.java:825) ... 42 more Root exception: org.eclipse.core.internal.dtree.ObjectNotFoundException: Tree element '/General/Scripts/mes/Utils.sql' not found. at org.eclipse.core.internal.dtree.AbstractDataTree.handleNotFound(AbstractDataTree.java:183) at org.eclipse.core.internal.dtree.DeltaDataTree.getData(DeltaDataTree.java:572) at org.eclipse.core.internal.dtree.DataDeltaNode.asBackwardDelta(DataDeltaNode.java:54) at org.eclipse.core.internal.dtree.NoDataDeltaNode.asBackwardDelta(NoDataDeltaNode.java:63) at org.eclipse.core.internal.dtree.NoDataDeltaNode.asBackwardDelta(NoDataDeltaNode.java:63) at org.eclipse.core.internal.dtree.NoDataDeltaNode.asBackwardDelta(NoDataDeltaNode.java:63) at org.eclipse.core.internal.dtree.DataDeltaNode.asBackwardDelta(DataDeltaNode.java:51) at org.eclipse.core.internal.dtree.DeltaDataTree.asBackwardDelta(DeltaDataTree.java:96) at org.eclipse.core.internal.dtree.DeltaDataTree.reroot(DeltaDataTree.java:809) at org.eclipse.core.internal.dtree.DeltaDataTree.reroot(DeltaDataTree.java:808) at org.eclipse.core.internal.dtree.DeltaDataTree.reroot(DeltaDataTree.java:808) at org.eclipse.core.internal.dtree.DeltaDataTree.reroot(DeltaDataTree.java:808) at org.eclipse.core.internal.dtree.DeltaDataTree.reroot(DeltaDataTree.java:808) at org.eclipse.core.internal.dtree.DeltaDataTree.reroot(DeltaDataTree.java:808) at org.eclipse.core.internal.dtree.DeltaDataTree.reroot(DeltaDataTree.java:808) at org.eclipse.core.internal.dtree.DeltaDataTree.reroot(DeltaDataTree.java:808) at org.eclipse.core.internal.dtree.DeltaDataTree.reroot(DeltaDataTree.java:808) at org.eclipse.core.internal.dtree.DeltaDataTree.reroot(DeltaDataTree.java:785) at org.eclipse.core.internal.watson.ElementTree.immutable(ElementTree.java:540) at org.eclipse.core.internal.resources.SaveManager.restore(SaveManager.java:797) at org.eclipse.core.internal.resources.SaveManager.startup(SaveManager.java:1616) at org.eclipse.core.internal.resources.Workspace.startup(Workspace.java:2618) at org.eclipse.core.internal.resources.Workspace.open(Workspace.java:2319) at org.eclipse.core.resources.ResourcesPlugin$WorkspaceInitCustomizer.addingService(ResourcesPlugin.java:591) at org.eclipse.core.resources.ResourcesPlugin$WorkspaceInitCustomizer.addingService(ResourcesPlugin.java:1) at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:947) at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:1) at org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:257) at org.osgi.util.tracker.AbstractTracked.trackInitial(AbstractTracked.java:184) at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:324) at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:267) at org.eclipse.core.resources.ResourcesPlugin.start(ResourcesPlugin.java:565) at org.eclipse.osgi.internal.framework.BundleContextImpl$2.run(BundleContextImpl.java:833) at org.eclipse.osgi.internal.framework.BundleContextImpl$2.run(BundleContextImpl.java:1) at java.base/java.security.AccessController.doPrivileged(Unknown Source) at org.eclipse.osgi.internal.framework.BundleContextImpl.startActivator(BundleContextImpl.java:825) at org.eclipse.osgi.internal.framework.BundleContextImpl.start(BundleContextImpl.java:775) at org.eclipse.osgi.internal.framework.EquinoxBundle.startWorker0(EquinoxBundle.java:1057) at org.eclipse.osgi.internal.framework.EquinoxBundle$EquinoxModule.startWorker(EquinoxBundle.java:387) at org.eclipse.osgi.container.Module.doStart(Module.java:639) at org.eclipse.osgi.container.Module.start(Module.java:498) at org.eclipse.osgi.framework.util.SecureAction.start(SecureAction.java:528) at org.eclipse.osgi.internal.hooks.EclipseLazyStarter.postFindLocalClass(EclipseLazyStarter.java:122) at org.eclipse.osgi.internal.loader.classpath.ClasspathManager.findLocalClass(ClasspathManager.java:620) at org.eclipse.osgi.internal.loader.ModuleClassLoader.findLocalClass(ModuleClassLoader.java:348) at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:414) at org.eclipse.osgi.internal.loader.sources.SingleSourcePackage.loadClass(SingleSourcePackage.java:41) at org.eclipse.osgi.internal.loader.BundleLoader.findClass0(BundleLoader.java:516) at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:434) at org.eclipse.osgi.internal.loader.ModuleClassLoader.loadClass(ModuleClassLoader.java:174) at java.base/java.lang.ClassLoader.loadClass(Unknown Source) at org.jkiss.dbeaver.core.DesktopPlatform.initialize(DesktopPlatform.java:136) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.base/java.lang.reflect.Method.invoke(Unknown Source) at org.jkiss.dbeaver.utils.RuntimeUtils.injectComponentReferences(RuntimeUtils.java:708) at org.jkiss.dbeaver.utils.RuntimeUtils.getBundleService(RuntimeUtils.java:680) at org.jkiss.dbeaver.runtime.DBWorkbench.getApplicationWorkbench(DBWorkbench.java:45) at org.jkiss.dbeaver.runtime.DBWorkbench.getPlatform(DBWorkbench.java:51) at org.jkiss.dbeaver.utils.SystemVariablesResolver.getWorkspacePath(SystemVariablesResolver.java:99) at org.jkiss.dbeaver.utils.SystemVariablesResolver.get(SystemVariablesResolver.java:66) at org.jkiss.dbeaver.utils.GeneralUtils.replaceVariables(GeneralUtils.java:553) at org.jkiss.dbeaver.utils.GeneralUtils.replaceVariables(GeneralUtils.java:526) at org.jkiss.dbeaver.ui.app.standalone.DBeaverApplication.initDebugWriter(DBeaverApplication.java:728) at org.jkiss.dbeaver.ui.app.standalone.DBeaverApplication.start(DBeaverApplication.java:243) at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:208) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:143) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:109) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:439) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:271) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.base/java.lang.reflect.Method.invoke(Unknown Source) at org.jkiss.dbeaver.launcher.DBeaverLauncher.invokeFramework(DBeaverLauncher.java:650) at org.jkiss.dbeaver.launcher.DBeaverLauncher.basicRun(DBeaverLauncher.java:610) at org.jkiss.dbeaver.launcher.DBeaverLauncher.run(DBeaverLauncher.java:1461) !ENTRY org.jkiss.dbeaver.model 2 0 2025-12-24 16:20:04.700 !MESSAGE Error matching regex !SUBENTRY 1 org.jkiss.dbeaver.model 2 0 2025-12-24 16:20:04.700 !MESSAGE Cannot invoke "org.jkiss.dbeaver.model.app.DBPWorkspace.getAbsolutePath()" because the return value of "org.jkiss.dbeaver.model.app.DBPPlatform.getWorkspace()" is null !STACK 0 java.lang.NullPointerException: Cannot invoke "org.jkiss.dbeaver.model.app.DBPWorkspace.getAbsolutePath()" because the return value of "org.jkiss.dbeaver.model.app.DBPPlatform.getWorkspace()" is null at org.jkiss.dbeaver.utils.SystemVariablesResolver.getWorkspacePath(SystemVariablesResolver.java:99) at org.jkiss.dbeaver.utils.SystemVariablesResolver.get(SystemVariablesResolver.java:66) at org.jkiss.dbeaver.utils.GeneralUtils.replaceVariables(GeneralUtils.java:553) at org.jkiss.dbeaver.utils.GeneralUtils.replaceVariables(GeneralUtils.java:526) at org.jkiss.dbeaver.ui.app.standalone.DBeaverApplication.initDebugWriter(DBeaverApplication.java:728) at org.jkiss.dbeaver.ui.app.standalone.DBeaverApplication.start(DBeaverApplication.java:243) at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:208) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:143) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:109) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:439) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:271) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.base/java.lang.reflect.Method.invoke(Unknown Source) at org.jkiss.dbeaver.launcher.DBeaverLauncher.invokeFramework(DBeaverLauncher.java:650) at org.jkiss.dbeaver.launcher.DBeaverLauncher.basicRun(DBeaverLauncher.java:610) at org.jkiss.dbeaver.launcher.DBeaverLauncher.run(DBeaverLauncher.java:1461) !ENTRY org.jkiss.dbeaver.model 2 0 2025-12-24 16:20:04.729 !MESSAGE Metadata is read before workspace initialization !ENTRY org.jkiss.dbeaver.model 2 0 2025-12-24 16:20:04.808 !MESSAGE Metadata is read before workspace initialization !ENTRY org.jkiss.dbeaver.model 2 0 2025-12-24 16:20:04.866 !MESSAGE Metadata is read before workspace initialization !ENTRY org.jkiss.dbeaver.model 2 0 2025-12-24 16:20:05.896 !MESSAGE Metadata is read before workspace initialization !ENTRY org.jkiss.dbeaver.model 2 0 2025-12-24 16:20:06.306 !MESSAGE Metadata is read before workspace initialization !ENTRY org.jkiss.dbeaver.model 2 0 2025-12-24 16:20:06.337 !MESSAGE Metadata is read before workspace initialization !SESSION 2025-12-24 16:20:11.117 ----------------------------------------------- eclipse.buildId=unknown java.version=17.0.6 java.vendor=Eclipse Adoptium BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=zh Framework arguments: -eclipse.keyring C:\Users\王建伟\AppData\Roaming\DBeaverData\secure\secure_storage Command-line arguments: -os win32 -ws win32 -arch x86_64 !ENTRY org.eclipse.core.resources 2 10035 2025-12-24 16:20:12.411 !MESSAGE The workspace exited with unsaved changes in the previous session; refreshing workspace to recover changes.
最新发布
12-25
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值