[NOI Online 2022 提高组] 丹钓战

NOI Online #1入门组详细题解 文章目录SolutionT1T2T3SummaryCodeABC Solution T1 考虑O(n2)O(n^2)O(n2)暴力: 枚举a,ba,ba,b,然后求出对应的ccc,更新答案。 这种做法会T掉。虽然我们可以将时间复杂度优化到O(n)O(n)O(n),可事实上暴力大力剪枝+卡常就能过。 ①对于一个aaa,我们将bbb先从0−30-30−3枚举一遍,如果这些bbb都不行,那么这个aaa就不行了;直接break; ②得到一个ccc的特解后,每次将ccc加444而不是加111,这样可以保证对于每一个c 阅读详情

题目背景

经过管理员的考虑,我们打算将民间数据单独存放在最后一个 Subtask 中。这些测试点分数均为 0 分,但是没有通过其中的任何测试点将会视为此题不通过。

这一题中出现了评测记录测试点编号错乱的问题,是民间数据命名方式冲突导致的。但是我们保证其相对顺序没有混乱。

民间数据提供者:@Froggy。

题目描述

有 nn 个二元组 (a_i, b_i)(ai​,bi​),编号为 11 到 nn。

有一个初始为空的栈 SS,向其中加入元素 (a_i, b_i)(ai​,bi​) 时,先不断弹出栈顶元素直至栈空或栈顶元素 (a_j , b_j)(aj​,bj​) 满足 a_i \neq a_jai​=aj​ 且 b_i < b_jbi​<bj​,然后再将其加入栈中。

如果一个二元组入栈后栈内只有这一个元素,则称该二元组是“成功的”。

有 qq 个询问 [l_i, r_i][li​,ri​],表示若将编号在 [l_i, r_i][li​,ri​] 中的二元组按编号从小到大依次入栈,会有多少个二元组是“成功的”。

询问之间相互独立。

输入格式

第一行两个正整数 n,qn,q。

第二行 nn 个正整数表示 a_iai​。

第三行 nn 个正整数表示 b_ibi​。

接下来 qq 行,每行两个正整数 l_i, r_ili​,ri​,表示一组询问。

输出格式

qq 行,每行一个自然数表示一组询问的答案。

输入输出样例

输入 #1复制

10 4
3 1 3 1 2 3 3 2 1 1
10 10 2 9 7 5 4 7 6 1
1 4
7 8
7 10
1 8

输出 #1复制

3
2
2
3

说明/提示

【样例解释】

以第一次询问 [1, 4][1,4] 为例。

一开始栈为 \{\}{}。

加入 11 号二元组后栈为 \{(3, 10)\}{(3,10)},栈中只有一个元素,该二元组是“成功的”。

加入 22 号二元组 (1, 10)(1,10) 时,栈顶的 (3, 10)(3,10) 的 bb 值不大于 22 号二元组的,因此弹栈。此时栈空,22 号二元组入栈,栈为 \{(1, 10)\}{(1,10)},该二元组是“成功的”。

加入 33 号二元组 (3, 2)(3,2),此时栈顶元素与之 aa 值不同,bb 值比它更大,因而不需要弹栈,直接将 33 号二元组入栈,栈为 \{(1, 10),(3, 2)\}{(1,10),(3,2)},栈中有多个元素,该二元组不是“成功的”。

加入 44 号二元组 (1, 9)(1,9),此时栈顶元素 (3, 2)(3,2) 的 bb 值比它小,弹栈。弹栈后栈顶元素 (1, 10)(1,10) 与 (1, 9)(1,9) 的 aa 值相同,继续弹栈。此时栈空,44 号二元组入栈,栈为 \{(1, 9)\}{(1,9)},该二元组是“成功的”。共有 33 个二元组是“成功的”,因而答案为 33。

【样例 2,3,4】

见附件 \texttt{stack/stack*.in}stack/stack*.in 与 \texttt{stack/stack*.ans}stack/stack*.ans。

链接:百度网盘 请输入提取码 提取码:gugu

【数据范围与提示】

对于所有测试点:1 \leq n, q \leq 5 \times 10^51≤n,q≤5×105,1 \leq a_i, b_i \leq n1≤ai​,bi​≤n,1 \leq l_i \leq r_i \leq n1≤li​≤ri​≤n。

每个测试点的具体限制见下表:

测试点编号特殊性质
1 \sim 31∼3n,q \leq 1000n,q≤1000
4 \sim 64∼6n \leq 5000n≤5000
7 \sim 107∼10n,q \leq 10^5n,q≤105
11 \sim 1211∼12b_i=n-i+1bi​=n−i+1
13 \sim 1513∼15a_i=iai​=i
16 \sim 2016∼20无

 

虽然题面上已经提醒我们要用单调栈了。

但是我们要有叛逆创新思维。

首先观察到 1 \leq n, q \leq 5 \times 10^51≤n,q≤5×105,这个数据范围说明出题人不仅提示我们可以用单调栈,还可以用莫队做

知道出题人给我们的提示后,我们就可以开始莫队了。

首先我们预处理一个 fa 数组,然后这个 fa 数组是干什么用的呢,是用来记录假如从第1个开始放,那么当第 ii 个二元组入栈前栈顶的下标。

实现也肥肠简单:

	k=i-1;
	while(k&&((a[k]==a[i])||((a[k]^a[i])&&b[k]<=b[i])))
		k=fa[k];
	fa[i]=k;

实际上原理就是模拟一下栈的情况,随便手推一下就可以了。

另外对于每个下标 ii 我们都开一个 vector cnt 记录所有将 ii 作为 fa 的位置:

    cnt[i].emplace_back(-0x7ffffff);//先压一个方便二分
    cnt[k].emplace_back(i);

易知预处理是 O(n)O(n) 的。

接下来就是莫队环节了。

首先我们考虑右指针的移动,比较简单:

右端的移动表示把一个新的数压进栈内。

右移(压栈):

	while(q[i].r>r)
		ans+=(fa[++r]<l?1:0);

假如阻挡这个二元组到达栈底的二元组不在当前的询问区间(没有入栈)那么自然这个数可以一通到底;

左移(弹栈):

	while(q[i].r<r)
		ans-=(fa[r--]<l?1:0);

同理假如这个二元组做出了贡献就要减掉。

然后来考虑左指针。

左指针移动有一点麻烦,因为不管是在操作序列最前端加入或者删除都有可能影响操作序列后端的二元组对答案的贡献。

这个时候之前预处理的 cnt 就有用了:

左移(加入):

	while(q[i].l<l)
	{
		l--,ans++;
		vector<int>::iterator t1=upper_bound(cnt[l].begin(),cnt[l].end(),l);
		vector<int>::iterator t2=upper_bound(cnt[l].begin(),cnt[l].end(),r)-1;
		if(t1!=cnt[l].end()&&t2!=cnt[l].begin())
		ans-=(t2-t1+1);
	}

二分找到在区间 [l,r][l,r] 内以 ii 为 fa 的二元组。

由于假如 ii 没有加入,那么这些二元组可以为答案做出贡献,现在加入了,就要减掉。

另外由于 ii 成为了第一个入栈的,所以 ii 会对答案产生贡献,所以 ans++ 。

同理可得右移(删除):

	while(q[i].l>l)
	{
		vector<int>::iterator t1=upper_bound(cnt[l].begin(),cnt[l].end(),l);
		vector<int>::iterator t2=upper_bound(cnt[l].begin(),cnt[l].end(),r)-1;
		if(t1!=cnt[l].end()&&t2!=cnt[l].begin())
			ans+=(t2-t1+1);
		l++,ans--;
	}

时间复杂度 n\sqrt {nlogn}nnlogn​ ,应该还有更紧的上界,但是我懒得算了(

我也不知道为什么这东西为什么可以过,总之各种玄学卡常就过了

code:

#include<bits/stdc++.h>
#define Maxn 500100
using namespace std;
namespace DEBUG {
	inline void cerr_out(){cerr<<'\n';}
	template<typename Head,typename... Tail>
	inline void cerr_out(Head H,Tail... T){cerr<<' '<<H,cerr_out(T...);}
	void debug_out() { cerr << '\n'; }
	template <typename Head, typename... Tail>
	void debug_out(Head H, Tail... T) { cerr << ' ' << H, debug_out(T...); }
#define debug(...) cerr << '[' << #__VA_ARGS__ << "]:", debug_out(__VA_ARGS__)
} using namespace DEBUG;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
#define getchar() (S==T&&(T=(S=B)+fread(B,1,1<<15,stdin),S==T)?EOF:*S++)
namespace get_out
{
	char B[1<<20],*S=B,*T=B;
	char op;
	inline void read_(int &x)
	{
		x=0;
		int fi(1);
		op=getchar();
		while((op<'0'||op>'9')&&op!='-') op=getchar();
		if(op=='-') op=getchar(),fi=-1;
		while(op>='0'&&op<='9') x=(x<<1)+(x<<3)+(op^48),op=getchar();
		x*=fi;
		return;
	}
	inline void read_(long long &x)
	{
		x=0;
		int fi(1);
		op=getchar();
		while((op<'0'||op>'9')&&op!='-') op=getchar();
		if(op=='-') op=getchar(),fi=-1;
		while(op>='0'&&op<='9') x=(x<<1)+(x<<3)+(op^48),op=getchar();
		x*=fi;
		return;
	}
	inline void read_(double &x)
	{
		x=0.0;
		float fi(1.0),sm(0.0);
		op=getchar();
		while((op<'0'||op>'9')&&op!='-') op=getchar();
		if(op=='-') op=getchar(),fi=-1.0;
		while(op>='0'&&op<='9') x=(x*10.0)+(op^48),op=getchar();
		if(op=='.') op=getchar();
		int rtim=0;
		while(op>='0'&&op<='9') sm=(sm*10.0)+(op^48),++rtim,op=getchar();
		while(rtim--) sm/=10.0;
		x+=sm,x*=fi;
		return;
	}
	inline void read_(string &s)
	{
		char c(getchar());
		s="";
		while(!isgraph(c)&&c!=EOF) c=getchar();
		for(;isgraph(c);c=getchar()) s+=c;
	}
	inline void read_(char &c)
	{
		for(c=op;c==' '||c=='\n'||c=='\r'||c=='\t';c=getchar());
		op=c;
	}
	
	template<typename Head,typename ...Tail>
	inline void read_(Head& h,Tail&... t)
	{read_(h),read_(t...);}
	
	inline void write_(){}
	inline void postive_write(unsigned x)
	{
		if(x>9) postive_write(x/10);
		putchar(x%10|'0');
	}
	inline void postive_write(unsigned long long x)
	{
		if(x>9) postive_write(x/10);
		putchar(x%10|'0');
	}
	inline void postive_write(int x)
	{
		if(x>9) postive_write(x/10);
		putchar(x%10|'0');
	}
	inline void postive_write(long long x)
	{
		if(x>9) postive_write(x/10);
		putchar(x%10|'0');
	}
	inline void postive_write(short x)
	{
		if(x>9) postive_write(x/10);
		putchar(x%10|'0');
	}
	inline void write_(const char* ss) {while(*ss) putchar(*ss++);}
	inline void write_(char c) {putchar(c);}
	inline void write_(string s) {for(unsigned i=0;i<s.size();++i) putchar(s[i]);}
	inline void write_(short x)
	{
		if(x<0) putchar('-'),postive_write(-x);
		else postive_write(x);
	}
	inline void write_(int x)
	{
		if(x<0) x=-x,putchar('-');
		postive_write(x);
	}
	inline void write_(long long x)
	{
		if(x<0) x=-x,putchar('-');
		postive_write(x);
	}
	inline void write_(unsigned x) {postive_write(x);}
	inline void write_(ull x) {postive_write(x);}
	
	template<typename Head,typename ...Tail>
	inline void write_(Head h,Tail ...t) {write_(h),write_(t...);}
}
using get_out::read_;
using get_out::write_;
//dalao嘉年华提供的快到飞起的快读
vector<int>cnt[Maxn<<1];
int n,F,m,fa[Maxn<<1];
int a[Maxn<<1],b[Maxn<<1],ans_[Maxn<<1];
struct ques
{
	int l,r,id;
	int bl;
}q[Maxn<<1];
inline bool cmp(ques &a,ques &b)
{
	return a.bl!=b.bl?a.bl<b.bl:a.r<b.r;
}
int main()
{
	read_(n,m);
	F=pow(n,0.45)+5;
	for(register int i=1;i<=n;i++) read_(a[i]);
	for(register int i=1;i<=n;i++) read_(b[i]);
	for(register int i=1,k;i<=n;i++)
	{
		cnt[i].emplace_back(-0x7ffffff);
		k=i-1;
		while(k&&((a[k]==a[i])||((a[k]^a[i])&&b[k]<=b[i])))
			k=fa[k];
		cnt[fa[i]=k].emplace_back(i);
	}
	for(register int i=1;i<=m;i++)
	{
		read_(q[i].l,q[i].r);
		q[i].id=i,q[i].bl=q[i].l/F;
	}
	sort(q+1,q+m+1,cmp);
//	cerr<<clock();
	int l=1,r=1,ans=1;
	for(register int i=1;i<=m;i++)
	{
		while(q[i].r>r)
			ans+=(fa[++r]<l?1:0);
		while(q[i].l<l)
		{
			l--,ans++;
			vector<int>::iterator t1=upper_bound(cnt[l].begin(),cnt[l].end(),l);
			vector<int>::iterator t2=upper_bound(cnt[l].begin(),cnt[l].end(),r)-1;
			if(t1!=cnt[l].end()&&t2!=cnt[l].begin())
				ans-=(t2-t1+1);
		}
		while(q[i].r<r)
			ans-=(fa[r--]<l?1:0);
		while(q[i].l>l)
		{
			vector<int>::iterator t1=upper_bound(cnt[l].begin(),cnt[l].end(),l);
			vector<int>::iterator t2=upper_bound(cnt[l].begin(),cnt[l].end(),r)-1;
			if(t1!=cnt[l].end()&&t2!=cnt[l].begin())
				ans+=(t2-t1+1);
			l++,ans--;
		}
		ans_[q[i].id]=ans;
	}
	for(register int i=1;i<=m;i++) write_(ans_[i],'\n');
}

 

#A95. [NOI Online 2022 提高组] 丹钓战 加入 33 号二元组 (3,2)(3,2),此时栈顶元素与之 �a 值不同,�b 值比它更大,因而不需要弹栈,直接将 33 号二元组入栈,栈为 {(1,10),(3,2)}{(1,10),(3,2)},栈中有多个元素,该二元组不是“成功的”。有一个初始为空的栈 �S,向其中加入元素 (��,��)(ai​,bi​) 时,先不断弹出栈顶元素直至栈空或栈顶元素 (��,��)(aj​,bj​) 满足 ��≠��ai​=aj​ 且 �� 阅读详情

相关推荐

2083: 如何正确地排序(NOI Online2022提高组T3)优快云博客

2083: 如何正确地排序(NOI Online2022提高组T3)优快云博客

2401_82834444的博客 507

战报:从NOI Online到省选

NOI Online是刚好半个月以前的比赛,今天刚刚考完省选二试,正好一起作个总结。 一.考试内容总结 首先从我的体感上,虽然省选的难度实实在在的仅次于国赛,而且打开洛谷一看,省选很少有“省选”题,全是一面一面的黑题,而往年的NOI Online(其实也就两年)难度离谱到入门组比提高组还难(离谱的地方就在于,还真不是提高组太简单,捂脸)。但是今年我感觉省选的题还真的没有之前几周的模拟难度大,而NOI Online则是看着不太难而实际上非常恶心。 先总结一下NOI Online,往年的都是三道蓝题或者黄题、紫

eliyou的博客 2248

NOI Online培训1至26期例题解析(1-5期)

本文整理了NOI Online培训课程中关于程序设计基础的内容摘要,主要包括顺序结构和选择结构编程。顺序结构部分讲解了长方形周长/面积计算、时间转换等基础例题;选择结构部分涵盖了条件判断、分支语句(if-else/switch)的应用实例,如成绩等级评定、闰年判断、方程求解等。文章还比较了scanf/printf与cin/cout的区别,并通过万年历计算等综合案例展示了选择结构的实际应用。所有示例均使用C++实现,适合编程初学者学习基础语法和控制结构。

飞起来的喵 1704

NOI Online 2022 提高组&普及组总结

总结 提高组 T1 丹钓战 考场时想的就是从头到尾模拟一遍,找到每一个二元组最前一个不会被弹出的二元组是哪个。然后将询问离线,按rir_iri​从小到大排序。再从头来一遍,将每个点的前驱存入数状数组,每到一个rir_iri​就用数状数组查询在lil_ili​和rir_iri​之间的前驱小于lil_ili​的二元组个数,即为此查询的答案。 预估: 100 实际: 100 AC代码如下 #include<bits/stdc++.h> using namespace std; int n,q,top=

tanjunming2020的博客 3047

NOI Online2020 TG.zip

为给选手提供一个锻炼的机会,CCF拟举办一场NOI Online能力测试。测试分为入门组和提高组,每组限额报名3万人,人数报满关闭系统,每组成功报名选手在同一时间参加线上测试。 一、测试时间: 提高组:3月7日8:30-12:00 入门组:3月7日14:30-18:00 二、测试方式: 1.选手报名成功后,根据系统生成的准考证号和密码登陆测试系统。 2.测试试题均采用电子版,每组3道题目。选手在线提交源程序,测试系统离线统一评测。 三、报名资格及时间: 1.因本次测试为限额参加,为给更多选手机会,每位选手限报名一组测试。如每组人数报满,系统会提前关闭。曾在CSP-J/S2019第二轮获一级的选手具有优先权。 2.分阶段报名: 第一阶段为CSP-J/S2019第二轮一级选手报名,时间:即日起至2月20日24:00截止; 第二阶段为开放报名,时间:2月21日-26日24:00截止。 四、报名方式: 1.测试费用:免费 2.报名网址:http://rg.noi.cn/(点击下载使用说明) 3.参加者请如实填写个人信息报名,包括但不限于姓名、身份证号、出生日期、性别、就学(学籍学校)/就职单位等。 4.测试前公布选手对应的动态地址,请关注邮件及NOI网站通知。 五、评测及成绩 本次测试不评奖、不颁发证书。3月20日前公示测试成绩前25%名单 六、咨询邮箱:noi@ccf.org.cn 此通知。 中国计算机学会 2020年2月17日

NOI全国青少年信息学奥林匹克竞赛测试数据(1997-2017).rar

NOI全国青少年信息学奥林匹克竞赛测试数据(1997-2017)NOI全国青少年信息学奥林匹克竞赛测试数据(1997-2017)NOI全国青少年信息学奥林匹克竞赛测试数据(1997-2017)NOI全国青少年信息学奥林匹克竞赛测试数据(1997-2017)NOI全国青少年信息学奥林匹克竞赛测试数据(1997-2017)

信息学奥赛刷题推荐:这些网站让你的编程水平突飞猛进

信息学奥赛的准备需要大量的练习,而找到合适的在线学习和刷题平台将使得你的备赛过程事半功倍。LeetCodeCodeforces洛谷等平台提供了丰富的题库和竞赛机会,帮助你从基础到进阶不断提升编程能力和算法思维。希望这些平台可以帮助你更好地准备信息学奥赛,取得优异的成绩!如果你觉得这篇文章对你有所帮助,请并关注我!让我们一起探索孩子成长中的更多精彩瞬间!

邓校长的编程课堂专栏 3283

从零到一:基于JasperGold的FPV实战入门与避坑指南

本文详细介绍了基于JasperGold的形式化验证(FPV)实战入门指南,涵盖环境搭建、SVA断言编写、TCL脚本调试等关键步骤。通过实际案例解析,帮助IC设计工程师掌握FPV技术,有效验证RTL设计中的复杂逻辑和corner case,提升验证效率与质量。

weixin_30899023的博客 360

NOI Online 2022提高组 丹钓战

题目大意 有一个栈设当前元素为iii,栈顶元素为jjj,弹出栈顶元素直到栈为空,或ai≠aja_i\neq a_jai​​=aj​且bi<bjb_i<b_jbi​<bj​。将l,rl,rl,r区间里的元素一次入栈,有多少个元素能把栈弹空。 题解 一个性质 我们可以发现如果前面的数加入栈后并不影响后面的操作,如果一个元素把询问栈弹空了,那么他弹完栈后栈顶部的元素的编号一定小于询问中的lll。我们便可以模拟一遍弹栈,记录iii号元素弹完后的栈顶编号为sis_isi​。 这样我们的问题便转化为

dongzheren2008的博客 918

Windows 11下WSL2安装CUDA避坑指南:从驱动版本匹配到环境变量配置

本文详细解析了在Windows 11的WSL2中搭建CUDA开发环境的完整流程与核心避坑要点。关键在于理解“驱动在Windows,工具链在Linux”的独特架构,并确保显卡驱动与CUDA Toolkit版本严格匹配。指南涵盖了从驱动验证、WSL-Ubuntu专用仓库安装、环境变量配置到GCC版本冲突、GPU算力不匹配等常见问题的解决方案,帮助开发者高效构建稳定的深度学习与高性能计算环境。

smartcontract5的博客 466

用树莓派搭建全功能NAS服务器(01):树莓派基础操作&OMV搭建

写在前面 对于文件互传来说,局域网和云盘的操作总是独立的,而且很难将两者的优势合为一体。如果想要集多种优势为一体,那么NAS应该就是较为完美的解决方案了。 在这个系列中我们尽量跳过一些枯燥的理论知识,专注于说明两件事:   1.NAS是什么&能做什么 2.搭建思路&怎么做   这中间也会涉及到一些方案的选择,同类方案我也会列出来和大家分享我已知的优缺点,有兴趣可以多种尝试。(侧重于软件) 虽然是用树莓派搭建的,但是对于debian linux系统下的NAS搭建有着很好的参

斯塔克家的真维斯的工作间 2万+

[NOI Online 2022 提高组] 丹钓战(单调栈 + 树状数组 / 主席树)

我就知道这个单调栈就是考单调栈。老实人不欺负老实人

1226

360加固DEX解密与ELF修复技术解析

本文深入解析了360加固APK的逆向分析技术,重点探讨了其DEX解密与ELF文件修复的核心流程。通过动态调试与Frida脚本,详细拆解了壳的启动机制、反调试绕过、自实现Linker技术,并还原了基于RC4和自定义算法的多层DEX解密过程,为移动安全研究人员提供了实用的实战分析思路。

alice7model的博客 701

2081: 丹钓战(NOI Online2022提高组T1)优快云博客

【代码】2081: 丹钓战(NOI Online2022提高组T1)优快云博客。

2401_82834444的博客 455

[亚信线上教学] AX58100: EtherCAT从站设备仿真功能设计教学

什么情况需要开启EtherCAT从站设备仿真功能呢? 一般来说, 当EtherCAT从站产品,不需要使用额外的微控制器介入,或使用不具备EtherCAT从站通讯协议栈的微控制器一同协作的情况下,就必须开启EtherCAT从站设备仿真功能,这样EtherCAT主站才能够正常设置从站设备的工作状态. 亚信AX58100 EtherCAT从站控制芯片的优点 AX58100 EtherCAT从站控制器, 集成2个百兆以太网Phis, 并支持一些额外的控制接口, 例如脉冲宽度调变, 增量, 霍尔编码器, .

allanchou1的专栏 7422

4-都2026年了,嵌入式发展前景怎么样,还适合入行吗?

本文系统分析了嵌入式行业的发展前景,指出到2026年嵌入式将迎来由"万物智联"驱动的黄金周期。文章回顾了嵌入式技术的四个演进阶段,从专用计算机到AIoT时代,强调其技术积累的延续性。作者从人才流向、产业智能化转型、高校新增专业等角度论证嵌入式行业的蓬勃发展,并提出"铁三角"模型分析其驱动力和护城河。最后给出职业发展路径建议,认为嵌入式适合长期主义者,在智能汽车、边缘计算等领域有广阔前景。文章建议读者抓住产业升级机遇,选择这一稳定且有复利效应的技术赛道。

指尖动听知识库 389

NOI Online 2022

NOI Online 2022

青少年趣味编程 496

SpringBoot中使用FastJson解析Json数据

场景 1.SpringBoot默认配置的是Jackson。 2.项目搭建专栏: https://blog.youkuaiyun.com/BADAO_LIUMANG_QIZHI/column/info/35688 实现 引入fastJson的依赖 <!-- fastjson的依赖 --> <dependency> <groupId>com.alibab...

BADAO_LIUMANG_QIZHI的博客 4140

NOI Online 2022t1 丹钓站 题解

《论为什么现场的我想不出 O(nlog⁡n)O(n\log n)O(nlogn) 做法只能用莫队拿 65 分这件事》 传送门 Step 1 关于丹钓站单调栈,我们有一个很好的性质。我们先按照题目的规定将 nnn 个二元组模拟一遍入栈过程。在过程中对每一个元素 (ai,bi)(a_i,b_i)(ai​,bi​),记录 preipre_iprei​ 表示这个元素进栈时栈顶元素的下标,若栈空则记为 -1。 你试几个数据后就会发现,得到所有 preipre_iprei​ 之后,问题瞬间变简单了。假设答案询问的区间

FelFa_1414666的博客 274

XCP实战系列介绍09-基于Vehicle Spy进行XCP测量步骤详解

详细介绍如何使用Vehicle Spy进行XCP测量

initiallizer的博客 1391

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

NOI ONLINE提高组

NOI ONLINE提高组

chenboshuai的博客 413

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

T2 [NOI Online 提高组]冒泡排序 题解

T2 [NOI Online 提高组]冒泡排序 这道题目实在是牛逼,主要是这个思想需要转变 暴力模拟肯定不行 我们仔细观察一下: 我们需要在第一时间内知道当前这个数字前面有多少个数字比这个数字大 说人话:知道在0~i-1下标有多少个数字比a[i]大 这个可以考虑统计一下树状数组统计一下比他小的数字有多少个(记作tot),前面有i个数字,反向求出比他大的数字。 第二: 我们这么想:如果需要排序,我们一定要找到规律 举个粟子:假设这个序列1 5 4 3 2 我们可以看见2前面有5 4 3,3

chun_ai_zhi_qing的博客 373

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

P6568 [NOI Online #3 提高组] 水壶

有n个容量无穷大的水壶,它们从1∼n编号,初始时i号水壶中装有Ai​单位的水。你可以进行不超过k次操作,每次操作需要选择一个满足1≤x≤n−1的编号x,然后把x号水壶中的水全部倒入x1号水壶中。最后你可以任意选择恰好一个水壶,并喝掉水壶中所有的水。现在请你求出,你最多能喝到多少单位的水。

zty20120913的博客 1283

NOI Online 2022 总结

NOI Online 2022 总结。

博客标题 798

[NOI online22提高A] 丹钓战

题目描述 有 \(n\) 个二元组 \((a_i, b_i)\),编号为 1 到 n。 有一个初始为空的栈 SS,向其中加入元素 \((a_i, b_i)\) 时,先不断弹出栈顶元素直至栈空或栈顶元素 \((a_j , b_j)\) 满足 \(a_i \neq a_j\)且 \(b_i < b_j\) ,然后再将其加入栈中。 如果一个二元组入栈后栈内只有这一个元素,则称该二元组是“成功的”...

mekoszc的博客 84
上一篇: P1110 [ZJOI2007] 报表统计
下一篇: [NOIP2007 提高组] 树网的核
I_am_Going_to_AKIOI
博客等级 码龄2年 536粉丝 55原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值