首页 > 其他分享 >The 2nd Universal Cup. Stage 1: Qingdao

The 2nd Universal Cup. Stage 1: Qingdao

时间:2023-09-04 18:55:52浏览次数:43  
标签:insert val Cup int Universal pos maxn sum Stage

G

Description

给定一个数列,每次ban一个位置,在每次ban之前,求连续子序列逆序对数的最大值,强制在线。(6s)\(n\leq10^5, \sum n \leq10^6\)

Solution

先考虑用权值线段树来维护区间逆序对数,不难支持在原数列前后加或删除一个数。然后考虑原题的分裂过程,将一段 \([l,r]\) 分裂成 \([l,p-1]\) 和 \([p+1,r]\) 两个区间,对于小的区间,直接暴力建一个新的线段树;对于大的区间,直接在 \([l,r]\) 的树上暴力减。

时间复杂度是 \(T(n) = 2T(\frac n2)+O(n\log n) = O(n\log ^2 n)\)

#include<bits/stdc++.h>
#define ll long long
#define irep(i,l,r) for(int i = l; i <= r; ++i)
#define drep(i,l,r) for(int i = r; i >= l; --i)
#define abs(x) (x > 0 ? x : -x)
using namespace std;

inline int read(){
	int s=0; bool fl = 0;
	char chcc=getchar();
	while(chcc<'0'||chcc>'9'){if(chcc == '-')fl = 1;chcc = getchar();}
	while(chcc>='0'&&chcc<='9') s=(s<<3)+(s<<1)+(chcc^48),chcc=getchar();
	return fl?-s:s;
}

struct segtree{
	int n, cur, siz;
	vector<array<int,5>>t;
	segtree(){}
	segtree(int maxn){
		n = maxn, cur = 0, siz = 0;
		t.push_back({0,maxn,-1,-1, 0});		
	}
	void init(int maxn){
		n = maxn, cur = 0, siz = 0;
		t.push_back({0,maxn,-1,-1, 0});		
	}
	void insert(int x,int v, int tim){
		if(x == -1)return;
		if(x == 0)siz += tim;
		auto [l,r,ls,rs,sum] = t[x];
		int mid = (l + r) >> 1;
		sum += tim;
		if(l == r){
			t[x] = {l,r,ls,rs,sum};
			return;
		}
		if(v <= mid){
			if(ls == -1){
				t.push_back({l, mid, -1, -1, 0});
				ls = ++ cur;
			}			
			t[x] = {l,r,ls,rs,sum};
			insert(ls, v, tim);
		}
		else{
			if(rs == -1){
				t.push_back({mid + 1, r ,-1, -1, 0});
				rs = ++ cur;
			}
			t[x] = {l,r,ls,rs,sum};
			insert(rs, v, tim);
		}
	}
	int query(int x, int v){
		if(x == -1)return 0;
		auto [l,r,ls,rs,sum] = t[x];	
		int mid = (l + r) >> 1;
		if(v < l)return 0;
		if(v >= r)return sum;
		return query(ls,v) + query(rs, v); 
	}
	segtree operator = (const int& mn){
		segtree tr(mn);
		return tr;	
	}
	void clear(){
		t.clear();
	}
	int size(){
		return siz;
	}
};
struct rg{
	int maxn;
	segtree t;
	ll sum = 0;
	void insert_back(int val){
		t.insert(0, val, 1);
		sum += t.size() - t.query(0, val);
	}
	void insert_front(int val){
		t.insert(0, val, 1);
		sum += t.query(0, val) - 1;
	}
	void del_front(int val){
		sum -= t.query(0, val) - 1;
		t.insert(0, val, -1);
	}
	void del_back(int val){
		sum -= t.size() - t.query(0, val);
		t.insert(0, val, -1);
	}
	int size(){
		return t.size();
	}
	rg(){}
	rg(int mx){
		sum = 0, maxn = mx;
		t.init(maxn);
	}
};
void solve(){
	int n = read();
	ll lstans = 0;
	set<int>st;
	multiset<ll>keys;
	vector<array<int,2>>arr;
	vector<int>a(n + 1);
	vector s(n + 1, rg(n));
	st.insert(-1);
	irep(i,0,n - 1)arr.push_back({read(),i});
	sort(arr.begin(), arr.end());
	irep(i,0,n - 1)a[arr[i][1]] = i;
	irep(i,0,n - 1)s[0].insert_back(a[i]);
	keys.insert(s[0].sum);
	irep(ii, 0, n - 1){
		lstans = *(-- keys.end());
		printf("%lld ",lstans);
		int pos = lstans ^ read();
		pos --;
		int l = *(-- st.lower_bound(pos)) + 1, r = l + s[l].size() - 1;
		keys.erase(keys.find(s[l].sum));
		if(s[l].size() < (pos - l) * 2){	
			for(int i = r; i > pos; --i){
				s[pos + 1].insert_front(a[i]);
				s[l].del_back(a[i]);
			}
			s[l].del_back(a[pos]);
		}else{
			for(int i = l; i < pos; ++i){
				s[l].del_front(a[i]);
				s[pos + 1].insert_back(a[i]);
			}
			s[l].del_front(a[pos]);
			swap(s[l], s[pos + 1]);
		}
		st.insert(pos);
		keys.insert(s[l].sum);
		if(pos + 1 < n)keys.insert(s[pos + 1].sum);
		
	}
	putchar('\n');
}

int main(){
	int T = read();
	while(T --)solve();
	return 0;
}

标签:insert,val,Cup,int,Universal,pos,maxn,sum,Stage
From: https://www.cnblogs.com/haze1231/p/17677843.html

相关文章

  • Java 服务器cup占用率过高 以及 内存泄漏排查方法
    cup占用率过高常见能够引起CPU100%异常的情况都有哪些?Java 内存不够或者溢出导致GCoverheadlimitexceeded。代码中互相竞争导致的死锁。特别耗费计算资源的操作,比如正则匹配,Java中的正则匹配默认有回溯问题,复杂的正则匹配引起的CPU异常。死循环引起的CPU高度密集计算。针对第1......
  • HarmonyOS/OpenHarmony(Stage模型)卡片开发应用上下文Context使用场景二
    3.创建其他应用或其他Module的Context基类Context提供创建其他应用或其他Module的Context的方法为createModuleContext(moduleName:string),创建其他应用或者其他Module的Context,从而通过该Context获取相应的资源信息(例如获取其他Module的获取应用开发路径信息)。调用createModuleCon......
  • 论文解读(TAMEPT)《A Two-Stage Framework with Self-Supervised Distillation For Cros
     论文信息论文标题:ATwo-StageFrameworkwithSelf-SupervisedDistillationForCross-DomainTextClassification论文作者:YunlongFeng,BohanLi,LiboQin,XiaoXu,WanxiangChe论文来源:2023aRxiv论文地址:download 论文代码:download视屏讲解:click1介绍 动......
  • HarmonyOS/OpenHarmony(Stage模型)卡片开发应用上下文Context使用场景一
    1.获取应用文件路径基类Context提供了获取应用文件路径的能力,ApplicationContext、AbilityStageContext、UIAbilityContext和ExtensionContext均继承该能力。应用文件路径属于应用沙箱路径。上述各类Context获取的应用文件路径有所不同。通过ApplicationContext获取应用级别的应用......
  • 20230618 java.util.concurrent.CompletionStage
    介绍java.util.concurrent.CompletionStagepublicinterfaceCompletionStage<T>java.util.concurrent.CompletableFuture的父接口API注意事项:所有方法都有类似的xxAsync以及重载,只详细列一下thenApply,其他不列出来有无返回值,可以通过看函数类型处理单个Future......
  • Linux打印服务-CUPS的安装、配置和使用
    原文:https://blog.csdn.net/limelove/article/details/121988838 CUPS(CommonUNIXPrintingSystem,即通用Unix打印系统)是苹果公司所有,一个打印集成服务。包括了前端接收打印命令的相关程序,后端控制打印机硬件的程序,中间则是打印驱动。首先来看看CUPS驱动打印机的方式。这里要......
  • 论文翻译:SSI-Net: A MULTI-STAGE SPEECH SIGNAL IMPROVEMENT SYSTEM FOR ICASSP 2023
    摘要ICASSP2023语音信号改善(SSI)挑战赛的重点是提高实时通信(RTC)系统的语音信号质量。本文介绍了提交ICASSP2023SSI挑战赛的语音信号改进网络(SSI-Net),该网络满足实时条件。提出的SSI-Net具有多阶段体系结构。在语音恢复的第一阶段,我们提出了时域恢复生成对抗网络(TRGA......
  • Pixelmator Pro 3.3.10 Mosaic (macOS Universal) - 专业图像编辑工具
    PixelmatorPro3.3.10Mosaic(macOSUniversal)-专业图像编辑工具请访问原文链接:https://sysin.org/blog/pixelmator-pro-3/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgPixelmatorPro真正基于AppleMac技术构建,不像某些异类(A3和奥多比)写个文档和做个图都......
  • NAPC-#1 rStage5 - Hard Conveyors
    这个人赛时只过了这题,但是同学@sinsop90赛时只没过这题,怎么会是呢?考虑到\(s,t\)之间路径必须经过关键点,假设这个关键点为\(k\),那么路径形式一定是\(s\tok\tot\)(废话)。画一下图发现这条路径的长度等于\(s\tot\)的简单路径长度加上\(k\)挂到\(s\tot\)简单路径这条......
  • cupsenable
    cupsenable启动指定的打印机补充说明cupsenable命令用于启动指定的打印机。语法cupsenable(选项)(参数)选项-E:当连接到服务器时强制使用加密;-U:指定连接服务器时使用的用户名;-u:指定打印任务所属的用户;-h:指定连接的服务器名和端口号;参数目标:指定目标打印机。......