Ynoi2019模拟赛题解

Nuclei漏洞扫描:从零到精通的Windows实战指南 本文详细介绍了Nuclei漏洞扫描工具在Windows平台上的安装与使用教程,从基础安装到高级实战技巧全面覆盖。通过具体案例展示如何利用Nuclei的模板库快速检测常见漏洞,并提供自定义POC开发指南,帮助安全从业者高效开展漏洞扫描工作。 阅读详情

Ynoi2019Ynoi2019Ynoi2019模拟赛题解

前言:第一次做YnoiYnoiYnoi还是有被离谱到的,我从来没有做到过这么卡常的题目,我到现在T1T1T1都还是707070分,lxllxllxl毒瘤名不虚传啊。但是不得不说,YnoiYnoiYnoi的题目质量很高,对提高DSDSDS水平还是很有帮助的。

T1:T1:T1: YunoYunoYuno loveslovesloves sqrtsqrtsqrt technologytechnologytechnology III

给你一个长为nnn的排列,mmm次询问,每次查询一个区间的逆序对数,强制在线。

1≤n,m≤105。1\leq n,m \leq 10^5。1≤n,m≤105。

这题非常卡常,这里我就简述做法。首先考虑序列分块,对于询问[l,r][l,r][l,r],计lll所在块为sss,rrr所在块为ttt,则可以预处理出[s+1,t−1][s+1,t-1][s+1,t−1]这些块的逆序对,具体方法就是,先对每个块块内排序,枚举两个块并通过归并排序O(n)O(\sqrt{n})O(n​)计算这两个块互相的贡献,复杂度O(nn)O(n\sqrt{n})O(nn​),记为f(a,b)f(a,b)f(a,b),再用树状数组O(nlog⁡n)O(n\log{n})O(nlogn)求出每个块内的逆序对数,即为f(a,a)f(a,a)f(a,a)。然后做一个类似二维前缀和:s(a,b)=f(a,b)+s(a,b−1)+s(a+1,b)−s(a+1,b−1)s(a,b)=f(a,b)+s(a,b-1)+s(a+1,b)-s(a+1,b-1)s(a,b)=f(a,b)+s(a,b−1)+s(a+1,b)−s(a+1,b−1),s(a,b)s(a,b)s(a,b)就是块aaa到块bbb的逆序对数。然后再算散块和散块之间的贡献,之间块内已经排过序了,之间把[l,ed(s)][l,ed(s)][l,ed(s)]和[st(t),r][st(t),r][st(t),r]从它们的块里抽出来,直接归并计算贡献,复杂度O(n)O(\sqrt{n})O(n​)。接下来算散块和[s+1,t−1][s+1,t-1][s+1,t−1]互相的贡献,可以对于每个块iii预处理[1,ed(i)][1,ed(i)][1,ed(i)]比每个数小的数个数,这个直接用一个空间O(nn)O(n\sqrt{n})O(nn​)的前缀和计算即可,然后O(1)O(1)O(1)计算对于左右散块每个数,块[s+1,t−1][s+1,t-1][s+1,t−1]对其的贡献。最后算[l,ed(s)][l,ed(s)][l,ed(s)]和[st(t),r][st(t),r][st(t),r]块内逆序对数,要处理两个数组pref[i]pref[i]pref[i]表示iii所在块的开头到iii逆序对数,suf[i]suf[i]suf[i]表示iii到iii所在块的结尾逆序对数。然后记得特判lll,rrr同块的情况,这时逆序对数即为pref[r]−pref[l−1]pref[r]-pref[l-1]pref[r]−pref[l−1]再减去[st(s),l−1][st(s),l-1][st(s),l−1]的逆序对数,后者之间归并排序求即可。复杂度O(nn)O(n\sqrt{n})O(nn​)。

代码放一下,但卡不过去,常数有点大。


#include<iostream>
#include<algorithm>
#include<string.h>
#define gc getchar
#define pc putchar
#define pb push_back
#define f first
#define s second
using namespace std;
typedef long long LL;
typedef pair<int,int> pii;
template<class Typ> Typ &Rd(Typ &x){
	char ch=gc(),sgn=0; x=0;
	for(;ch<'0'||ch>'9';ch=gc()) sgn|=ch=='-';
	for(;ch>='0'&&ch<='9';ch=gc()) x=x*10+(ch^48);
	return sgn&&(x=-x),x;
}
template<class Typ> void Wt(Typ x){
	if(x<0) pc('-'),x=-x;
	if(x>9) Wt(x/10);
	pc(x%10^48);
}
typedef long long LL;
const int N=1e5+5;
const int S=300;
LL Ans[400][400],ans;
LL Tr[N],cnt[400][N];
LL prf[N],suf[N];
int n,Q,A[N],in[N];
int st[400],ed[400]; pii B[N];
int Ma[400],Mb[400],la,lb;
void Add(int ps,int vl){
    for(;ps<=n;ps+=ps&-ps)
        Tr[ps]+=vl;
}
LL Ask(int ps){
    LL res=0;
    for(;ps;ps-=ps&-ps)
        res+=Tr[ps];
    return res;
}
int main(){
    Rd(n),Rd(Q);
    for(int i=1;i<=n;i++) B[i]={Rd(A[i]),i};
    for(int i=1;i<=n;i++) in[i]=(i-1)/S+1;
    for(int i=1;i<=in[n];i++)
        st[i]=(i-1)*S+1,ed[i]=min(i*S,n);
    for(int i=1;i<=in[n];i++){
        sort(B+st[i],B+ed[i]+1);
        memset(Tr,0,sizeof(Tr)),Add(A[st[i]],1);
        for(int j=st[i]+1;j<=ed[i];j++)
            prf[j]=prf[j-1]+Ask(n)-Ask(A[j]),Add(A[j],1);
        Ans[i][i]=prf[ed[i]];
        memset(Tr,0,sizeof(Tr)),Add(A[ed[i]],1);
        for(int j=ed[i]-1;j>=st[i];j--)
            suf[j]=suf[j+1]+Ask(A[j]),Add(A[j],1);
    }
    for(int i=1;i<=in[n];i++)
        for(int j=i+1;j<=in[n];j++)
            for(int p1=st[i],p2=st[j];p1<=ed[i];p1++){
                while(p2<=ed[j]&&B[p2].f<=B[p1].f) p2++;
                Ans[i][j]+=(LL)(p2-st[j]);
            }
    for(int len=1;len<=in[n];len++)
        for(int i=1;i+len-1<=in[n];i++){
            int j=i+len-1;
            Ans[i][j]+=Ans[i+1][j]+Ans[i][j-1];
            Ans[i][j]-=Ans[i+1][j-1];
        }
    for(int i=1;i<=in[n];i++){
        for(int j=1;j<=n;j++) cnt[i][j]=cnt[i-1][j];
        for(int j=st[i];j<=ed[i];j++) cnt[i][A[j]]++;
    }
    for(int i=1;i<=in[n];i++)
        for(int j=1;j<=n;j++) cnt[i][j]+=cnt[i][j-1];
    for(int i=1;i<=Q;i++){
        LL L,R; Rd(L)^=ans,Rd(R)^=ans;
        if(in[L]==in[R]){
            ans=prf[R]-(L!=st[in[L]])*prf[L-1],la=lb=0;
            for(int j=st[in[L]];j<=ed[in[L]];j++)
                if(B[j].s<L) Ma[++la]=B[j].f;
                else if(B[j].s<=R) Mb[++lb]=B[j].f;
            for(int p1=1,p2=1;p1<=la;p1++){
                while(p2<=lb&&Mb[p2]<=Ma[p1]) p2++;
                ans-=(LL)(p2-1);
            }
            Wt(ans),pc('\n');
        }else{
            ans=Ans[in[L]+1][in[R]-1],la=lb=0;
            ans+=suf[L]+prf[R];
            for(int j=L;j<=ed[in[L]];j++)
                ans+=cnt[in[R]-1][A[j]]-cnt[in[L]][A[j]];
            for(int j=st[in[R]];j<=R;j++){
                ans+=(LL)(ed[in[R]-1]-st[in[L]+1]+1);
                ans-=cnt[in[R]-1][A[j]]-cnt[in[L]][A[j]];
            }
            for(int j=st[in[L]];j<=ed[in[L]];j++)
                if(B[j].s>=L) Ma[++la]=B[j].f;
            for(int j=st[in[R]];j<=ed[in[R]];j++)
                if(B[j].s<=R) Mb[++lb]=B[j].f;
            for(int p1=1,p2=1;p1<=la;p1++){
                while(p2<=lb&&Mb[p2]<=Ma[p1]) p2++;
                ans+=(LL)(p2-1);
            }
            Wt(ans),pc('\n');
        }
    }
    return 0;
}

T2:T2:T2: YunoYunoYuno loveslovesloves sqrtsqrtsqrt technologytechnologytechnology IIIIII

给你一个长为nnn的序列aaa,mmm次询问,每次查询一个区间的逆序对数。

1≤n,m≤105,0≤ai≤109。1\leq n,m\leq 10^5,0\leq a_i\leq 10^9。1≤n,m≤105,0≤ai​≤109。

注意本题时限250ms250ms250ms,T1T1T1时限750ms750ms750ms都极为卡常,显然T1T1T1做法常数太大,不能通过此题。注意到可以离线,我们需要常数更小的离线做法。注意到莫队可以做到O(nmlog⁡n)O(n\sqrt m\log{n})O(nm​logn),但无法通过此题。这时候就要引入黑科技莫队二次离线\textbf{莫队二次离线}莫队二次离线。注意到莫队每次向右移动,增加的贡献是[l,r][l,r][l,r]中比rrr大的数,计f(a,b)f(a,b)f(a,b)表示[1,b][1,b][1,b]里比aaa位置的数大的数个数,则贡献可表示为f(r,r)−f(r,l−1)f(r,r)-f(r,l-1)f(r,r)−f(r,l−1),对于每次右端点移动,f(r,r)f(r,r)f(r,r)可以O(nlog⁡n)O(n\log{n})O(nlogn)预处理,下面考虑如何求f(r,l−1)f(r,l-1)f(r,l−1)。注意到可以将所以f(r,l−1)f(r,l-1)f(r,l−1)再次离线,按第二维排序,并向数据结构中进行nnn次插入,nmn\sqrt{m}nm​次查询求得所有f(r,l−1)f(r,l-1)f(r,l−1)。可以使用值域分块做到插入O(n)O(\sqrt{n})O(n​),查询O(1)O(1)O(1),所以总复杂度即为O(nn+nm)O(n\sqrt{n}+n\sqrt{m})O(nn​+nm​)。对左端点移动的处理同右端点。下面还有一个问题:空间复杂度O(nm)O(n\sqrt{m})O(nm​),因为要把所有询问离线,无法满足空间限制。注意到莫队移动左右端点时会先移动完一个再移动另一个,那我们只要记录移动开始到移动结束的位置即可,询问时直接从开始位置循环到结束位置,空间复杂度O(n+m)O(n+m)O(n+m)。

代码:

#include<iostream>
#include<vector>
#include<string.h>
#include<algorithm>
#define pb push_back
#define f first
#define s second
using namespace std;
typedef long long ll;
typedef double lf;
typedef pair<int,int> pii;
#define gc getchar 
#define pc putchar
template<class Typ> Typ &Rd(Typ &x){
	char ch=gc(),sgn=0; x=0;
	for(;ch<'0'||ch>'9';ch=gc()) sgn|=ch=='-';
	for(;ch>='0'&&ch<='9';ch=gc()) x=x*10+(ch^48);
	return sgn&&(x=-x),x;
}
template<class Typ> void Wt(Typ x){
	if(x<0) pc('-'),x=-x;
	if(x>9) Wt(x/10);
	pc(x%10^48);
}
const int N=1e5+5;
const int M=340;
int n,m,A[N],Num[N],len,Tr[N]; 
struct Qry{int l,r,id;}Qr[N];
struct Opt{int st,ed,sgn,id;};
vector<Opt> Lc[N],Rc[N];
ll s1[N],s2[N],ans[N];
int Tg[M],sum[N],st[M],ed[M];
int in(int x){return (x-1)/M+1;}
bool cmp(Qry a,Qry b){return in(a.l)==in(b.l)?a.r<b.r:in(a.l)<in(b.l);}
void Add(int ps){for(;ps<=len;ps+=ps&-ps) Tr[ps]++;}
int Ask(int ps){int sm=0; for(;ps;ps-=ps&-ps) sm+=Tr[ps]; return sm;}
int main(){
    Rd(n),Rd(m);
    for(int i=1;i<=n;i++) Num[++len]=Rd(A[i]);
    sort(Num+1,Num+len+1),len=unique(Num+1,Num+len+1)-Num-1;
    for(int i=1;i<=n;i++) A[i]=lower_bound(Num+1,Num+len+1,A[i])-Num;
    for(int i=1;i<=n;i++) s1[i]=s1[i-1]+Ask(len)-Ask(A[i]),Add(A[i]);
    memset(Tr,0,sizeof(Tr));
    for(int i=n;i>=1;i--) s2[i]=s2[i+1]+Ask(A[i]-1),Add(A[i]);
    for(int i=1;i<=m;i++) Rd(Qr[i].l),Rd(Qr[i].r),Qr[i].id=i;
    sort(Qr+1,Qr+m+1,cmp);
    for(int i=1,l=1,r=0;i<=m;i++){
        if(r<Qr[i].r) ans[Qr[i].id]+=s1[Qr[i].r]-s1[r],
            Rc[l-1].pb({r+1,Qr[i].r,-1,Qr[i].id}),r=Qr[i].r;
        if(r>Qr[i].r) ans[Qr[i].id]-=s1[r]-s1[Qr[i].r],
            Rc[l-1].pb({Qr[i].r+1,r,1,Qr[i].id}),r=Qr[i].r;
        if(Qr[i].l<l) ans[Qr[i].id]+=s2[Qr[i].l]-s2[l],
            Lc[r+1].pb({l-1,Qr[i].l,-1,Qr[i].id}),l=Qr[i].l;
        if(Qr[i].l>l) ans[Qr[i].id]-=s2[l]-s2[Qr[i].l],
            Lc[r+1].pb({Qr[i].l-1,l,1,Qr[i].id}),l=Qr[i].l;
    }
    for(int i=1;i<=in(len);i++)
        st[i]=(i-1)*M+1,ed[i]=min(i*M,len);
    for(int i=1;i<=n;i++){
        for(int j=A[i]-1;j>=st[in(A[i])];j--) sum[j]++;
        for(int j=in(A[i])-1;j>=1;j--) Tg[j]++;
        for(auto j:Rc[i]) for(int k=j.st;k<=j.ed;k++)
            ans[j.id]+=j.sgn*(sum[A[k]]+Tg[in(A[k])]);
    }
    memset(sum,0,sizeof(sum)),memset(Tg,0,sizeof(Tg));
    for(int i=n;i>=1;i--){
        for(int j=A[i]+1;j<=ed[in(A[i])];j++) sum[j]++;
        for(int j=in(A[i])+1;j<=in(len);j++) Tg[j]++;
        for(auto j:Lc[i]) for(int k=j.st;k>=j.ed;k--)
            ans[j.id]+=j.sgn*(sum[A[k]]+Tg[in(A[k])]);
    }
    for(int i=1;i<=m;i++) ans[Qr[i].id]+=ans[Qr[i-1].id];
    for(int i=1;i<=m;i++) Wt(ans[i]),pc('\n');
    return 0;
}

T3:T3:T3: YunoYunoYuno loveslovesloves sqrtsqrtsqrt technologytechnologytechnology IIIIIIIII

给你一个长为nnn的序列aaa,mmm次询问,每次查询一个区间的众数的出现次数,强制在线。

1≤n,m≤5×105,0≤ai≤109。1\leq n,m\leq 5\times 10^5,0\leq a_i\leq 10^9。1≤n,m≤5×105,0≤ai​≤109。

考虑序列分块。对于询问[l,r][l,r][l,r],记lll所在块为sss,rrr所在块为ttt,则可以先预处理出[s+1,t−1][s+1,t-1][s+1,t−1]的区间众数。具体求法就是从一个块iii开始往后扫描依次加入每个数,更新每个数出现次数时和答案取maxmaxmax即可。然后区间众数有一个性质:要么是[s+1,t−1][s+1,t-1][s+1,t−1]的答案,要么在散块中出现。这也很好证,如果一个数不是[s+1,t−1][s+1,t-1][s+1,t−1]的众数,而且不在散块中出现,显然出现次数比[s+1,t−1][s+1,t-1][s+1,t−1]的众数少。下面只要求出散块里每个数在[s+1,t−1][s+1,t-1][s+1,t−1]出现次数,和答案取maxmaxmax就好了,注意到一共有n\sqrt{n}n​级别的数,要求O(1)O(1)O(1)查询在[s+1,t−1][s+1,t-1][s+1,t−1]出现次数。显然前缀和可以做到,但是空间不够。于是有一个我认为很巧妙的方法可以实现:对每个数开一个vectorvectorvector,把它出现的所有位置插入这个vectorvectorvector,然后记录每个位置在vectorvectorvector里的下标,记为ps[i]ps[i]ps[i]。查询时一开始令ansansans等于[s+1,t−1][s+1,t-1][s+1,t−1]的众数出现次数,然后对应左边散块的每个位置iii,只要ps[i]+ansps[i]+ansps[i]+ans也在[l,r][l,r][l,r]中,就令ans+1ans+1ans+1。对应右边散块的每个位置iii,只要ps[i]−ansps[i]-ansps[i]−ans也在[l,r][l,r][l,r]中,就令ans+1ans+1ans+1。然后就做完了,时间复杂度O(nn)O(n\sqrt{n})O(nn​),空间复杂度O(n)O(n)O(n),常数很小。

#include<iostream>
#include<vector>
#include<algorithm>
#include<string.h>
#define gc getchar
#define pc putchar
#define pb push_back
#define f first
#define s second
using namespace std;
typedef long long LL;
typedef pair<int,int> pii;
template<class Typ> Typ &Rd(Typ &x){
	char ch=gc(),sgn=0; x=0;
	for(;ch<'0'||ch>'9';ch=gc()) sgn|=ch=='-';
	for(;ch>='0'&&ch<='9';ch=gc()) x=x*10+(ch^48);
	return sgn&&(x=-x),x;
}
template<class Typ> void Wt(Typ x){
	if(x<0) pc('-'),x=-x;
	if(x>9) Wt(x/10);
	pc(x%10^48);
}
const int N=5e5+5;
const int Len=750;
int n,m,A[N],Ans[Len][Len],ps[N],ans;
int cnt[N],st[Len],ed[Len],in[N];
int Num[N],len; vector<int> Id[N];
int main(){
	Rd(n),Rd(m);
	for(int i=1;i<=n;i++) Num[++len]=Rd(A[i]);
	sort(Num+1,Num+len+1);
	len=unique(Num+1,Num+len+1)-Num-1;
	for(int i=1;i<=n;i++)
		A[i]=lower_bound(Num+1,Num+len+1,A[i])-Num;
	for(int i=1;i<=n;i++)
		Id[A[i]].pb(i),ps[i]=Id[A[i]].size()-1;
	for(int i=1;i<=n;i++) in[i]=(i-1)/Len+1;
	for(int i=1;i<=in[n];i++)
		st[i]=(i-1)*Len+1,ed[i]=min(i*Len,n);
	for(int i=1;i<=in[n];i++){
		for(int j=i;j<=in[n];j++){
			Ans[i][j]=Ans[i][j-1];
			for(int k=st[j];k<=ed[j];k++)
				Ans[i][j]=max(Ans[i][j],++cnt[A[k]]);
		}
		memset(cnt,0,sizeof(cnt));
	}
	for(int i=1;i<=m;i++){
		int L,R; Rd(L)^=ans,Rd(R)^=ans;
		if(in[R]-in[L]<=1){
			ans=0;
			for(int j=L;j<=R;j++)
				ans=max(ans,++cnt[A[j]]);
			for(int j=L;j<=R;j++) cnt[A[j]]--;
			Wt(ans),pc('\n');
		}else{
			ans=Ans[in[L]+1][in[R]-1];
			for(int i=L;i<=ed[in[L]];i++)
				while(ps[i]+ans<Id[A[i]].size()
					&&Id[A[i]][ps[i]+ans]<=R) ans++;
			for(int i=st[in[R]];i<=R;i++)
				while(ps[i]-ans>=0&&Id[A[i]][ps[i]-ans]>=L) ans++;
			Wt(ans),pc('\n');
		}
	}
    return 0;
}
国债期货的日线趋势跟踪策略实现(基于backtrader框架) 通过backtrader框架,我们可以轻松地实现国债期货的日线趋势跟踪策略,并进行回测和验证。通过这种策略,我们可以尝试捕捉国债期货价格的短期趋势,并根据趋势的方向进行交易决策。backtrader提供了许多内置的指标、订单类型和其他功能,可以帮助你进一步优化和改进你的策略。它提供了丰富的工具和功能,使我们能够快速实现和验证我们的交易想法。方法中,我们根据当前价格和前一天的价格判断趋势的方向,并根据趋势的变化进行买入或卖出操作。然后,我们设置了初始资金和交易手续费,并将我们定义的策略。来跟踪每日的收盘价。 阅读详情

相关推荐

农业杂草检测——棉花杂草数据集

然后将本层13×13的特征图谱经过×2上采样扩充到26×26,并与上层中26×26的特征图谱拼接,得到新的26×26的特征图谱,在该特征尺度上进行第二次预测,此时得到的特征图谱是相对输入图像16倍下采样,具有中尺度感受野,适合检测中等尺度对象;通过目标检测,能够及时清除杂草,减少病虫害的滋生和传播,保障棉花的健康生长,并有助于降低生产成本。对于地膜覆盖的棉田,由于膜内耕作层土温高、底墒好,杂草出苗早而集中,一般覆膜后5 - 7天杂草陆续出土,在墒情好的情况下,15天左右即形成出土高峰。

qq_38220914的博客 1247

P5412 [YNOI2019] 排队 题解

快两天没发文章了.

drrick3000的博客 849

qt工程引入opencv库步骤

第一步:新建qt工程 第二步:在工程名.pro文件中添加opencv库的路径                   INCLUDEPATH += /home/liyuanzhe/opencv-2.4.8/include/opencv \ /home/liyuanzhe/opencv-2.4.8/include/opencv2 LIBS += /home/liyuanzhe/open

superyuanzhe的专栏 5722

打卡信奥刷题(1477)用C++实现信奥 P5413 [YNOI2019] 骑单车

小明每天早晨上课都需要骑着单车经过n段路,第i段路的长度为wi​m,限速为si​ms(在路上骑行的速度不能超过限速),加速度的绝对值最大为ai​ms2(可以加速也可以减速)。初始速度为0ms,你的任务是计算小明通过这n段路的最短时间。

Loge谈信奥--一个专注于信奥人的博客 1584

如何评价智能座舱的好坏之指标拆分?

智慧服务实际上是有一些比较实用的功能的,常用的有后视镜自动伸展、离车自动落锁、座椅记忆等,但这部分前装率较高,各家的区分度不高,所以一级指标中占比最低(10%)。不过呢,规则里的权重仅有5%,或许是考虑到比较成熟,没有区分度。全景环视明显拔得头筹,占比85%,这对于我这种没有倒车影像不敢倒车的人,举双手赞成,但还是要看其效果,比如,现在,测评规则的颁布实际上也让我们看到,智能座舱的技术方案正走向成熟,并将走进规范化运作。,占比 60%,这与我们对座舱最直接的认知符合,

shuiqingyan的博客 1084

Homebrew高效升级与国内镜像源配置全攻略

本文详细介绍了如何通过配置国内镜像源(如清华、中科大、阿里云)来高效升级Homebrew,解决国内开发者访问GitHub仓库速度慢的问题。文章提供了从基础配置到永久生效的完整教程,包括常见问题解决和进阶技巧,帮助开发者大幅提升软件包管理效率。

weixin_28835551的博客 416

YNOI板刷计划&记录

离开学还有7天,尝试刷30道YNOI并写题解 冲冲冲

lahlah的博客 862

NU1680无线充电接收器在TWS耳机中的应用实战:I2C调压与QI协议适配

本文详细解析了NU1680无线充电接收器在TWS耳机充电仓设计中的应用实战。重点阐述了其无固件设计、I2C接口动态调压功能如何解决不同QI协议发射器的兼容性难题,并分享了硬件设计、PCB布局、与发射端联调及安全测试等关键环节的实践经验,助力开发者快速实现稳定高效的无线充电方案。

weixin_28432777的博客 232

【口胡】Ynoi刷题记录

[Ynoi2019 模拟赛] Yuno loves sqrt technology III 分块后,预处理 Fi,jF_{i,j}Fi,j​表示第 i∼ji\sim ji∼j块的众数的出现次数。 用vector按顺序存每个数值所有元素的出现位置。 再记录每个元素在相应vector里的下标 ppp。 考虑询问,中间的直接使用预处理出的 Fi,jF_{i,j}Fi,j​的值即可。设当前的答案 ans=Fi,jans=F_{i,j}ans=Fi,j​。 考虑边界的元素。这里我们运用迭代的思想。对于右边的边角元素

cqbzlydd的博客 582

神经算子:突破科学计算瓶颈的函数空间映射技术

神经算子(Neural Operators)是深度学习在科学计算领域的重要突破,它从根本上改变了处理连续物理问题的方式。与传统神经网络学习离散数据点映射不同,神经算子学习的是函数空间到函数空间的映射,这种范式转换使其具备离散化收敛性和超分辨率预测能力。在计算流体力学、天气预报等需要求解偏微分方程的场景中,神经算子能够在保持精度的同时将计算速度提升数个数量级。傅里叶神经算子(FNO)通过快速傅里叶变换实现高效计算,特别适合规则网格问题;而图神经算子(GNO)则擅长处理不规则网格和复杂几何形状。这种技术为参数敏

cuililai5127的博客 443

智能解决装箱问题:使用优化算法实现高效包装

装箱问题(Bin Packing Problem)是组合优化领域中的一个经典问题,主要涉及如何将一系列对象高效地装入有限数量的容器(或“箱”)中,同时满足特定的约束条件。这个问题的目标是最小化所需使用的箱子数量或者最大化箱子的装载效率,以减少空间或资源的浪费。

MindOpt_003的博客 5548

Ynoi(5/35)

luoguP5309 [Ynoi2012]D1T1 luoguP5310 [Ynoi2012]D1T2 luoguP5311 [Ynoi2012]D1T3 luoguP5312 [Ynoi2012]D2T1 luoguP5313 [Ynoi2012]D2T2 luoguP5314 [Ynoi2012]D2T3 luoguP5062 [Ynoi2014]在太阳西斜的这个世界里 luog...

weixin_30664539的博客 1356

【33】软考软件设计师——算法题(二):贪心法与回溯法深度精讲|第4题进阶满分攻略

本文是《软件设计师·50讲通关|从零基础到工程师职称》专栏第33篇,承接第32篇分治法与动态规划,聚焦**下午第4题算法大题进阶核心**,详解贪心法与回溯法两大高频难点算法。全文超4000字深度拆解贪心法核心原理、贪心选择性质、局部最优推全局最优的底层逻辑,厘清贪心算法适用边界与经典误区;深挖回溯法深度优先遍历思想、递归回溯三步流程、可行性剪枝与最优性剪枝两大核心技巧;全覆盖活动选择、零钱兑换、01背包贪心禁区、八皇后、全排列等软考必考经典题型;配套标准化算法框架代码、考场填空模板、剪枝优化实操案例

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 439

LG P5046 [Ynoi2019 模拟赛] Yuno loves sqrt technology I Solution

LG P5046 Sol

pystraf的博客 1105

深度学习工具包 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")

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Ynoi2019模拟赛划水记

几天前被各种多项式搞自闭了,就去\(Ynoi2019模拟赛\)划了一波水,简单记一下(不过代码是不会有的,因为我一个题都没A而且看了讲评完全没有改题的欲望) T1 正解码量巨大而我只写了暴力,但是居然过了\(50pts\),为什么呢……回头审视代码发现原来是我习惯性卡常而且自己的代码框架里有这么一句: #pragma GCC optimize(3, "inline", "Ofast") 于是多水了...

weixin_30896825的博客 247

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

洛谷P5048 [Ynoi2019模拟赛]Yuno loves sqrt technology III(分块)

传送门 众所周知lxl是个毒瘤,Ynoi道道都是神仙题 用蒲公英那个分块的方法做结果两天没卡过去→_→ 首先我们分块,预处理块与块之间的答案,然后每次询问的时候拆成整块和两边剩下的元素 整块的答案很简单,那么只有两边剩下的元素有可能更新答案 我们对于每一个元素用\(vector\)记录所有的出现位置,设\(dep_i\)为位置为\(i\)的元素在\(vector\)中的位置,那么如果\(a_i\)...

weixin_34409822的博客 196

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

[Ynoi2019模拟赛]Yuno loves sqrt technology III

题目大意: 给你一个长为\(n\)的序列\(a\),\(m\)次询问,每次查询一个区间的众数的出现次数,强制在线。 解题思路: 出题人题解 众所周知lxl是个毒瘤,Ynoi道道都是神仙题 首先得离散化。 分块后,预处理\(F_{i,j}\)表示第\(i\sim j\)块的众数的出现次数。此处要用一个桶,空间复杂度\(O(n)\),时间复杂度\(O(n\sqrt n)\)。 ...

249

P5048 [Ynoi2019 模拟赛] Yuno loves sqrt technology III

假设已经知道了区间内众数出现的次数。查询区间众数出现的次数, 尝试对。对于每个数字记录出现的位置。假设区间内众数出现的次数是。

Ayanami_Rei的博客 567

[Ynoi2019模拟赛]Yuno loves sqrt technology I

题目描述 给你一个长为n的排列,m次询问,每次查询一个区间的逆序对数,强制在线。 题解 MD不卡了。。TMD一点都卡不动。 强制在线的话也没啥好一点的方法,只能分块预处理了。 对于每个块,我们设lef[i]表示i到这个i这个元素所在块的块头的区间逆序对,rig[i]表示到块尾的逆序对。 在设一个cnt[i][j]表示从第i个块到第j个块的逆序对。 然后考虑如何处理询问。 整块之间的...

weixin_34143774的博客 172

Yuno loves sqrt technology III[Ynoi2019模拟赛]【数组分块】

题目链接 我们想知道一个区间内的众数的个数,那么,我们可以把区间看成两种形式:「完整区间」、「不完整区间」,我们把一个区间分成这样的两种,然后可以预处理出来一个「完整区间」内的众数的个数,那么如果我们现在假设知道了这个答案,岂不是就可以对不完整区间进行查询了,如果一个不完整区间的数,能改变当前答案,那么也就是说明它的后面的第ans个它自己是在区间内的,那么我们可以预处理这个信息即可。 当然,本题有个很坑的地方,切记l和r的大小关系一定要判断。 #include <iostream&gt..

既然弱小,就只顾变强就是了 232

[Ynoi2019模拟赛]Yuno loves sqrt technology II

题目大意: 给定一个长为\(n\)的序列,\(m\)次询问,每次查询一个区间的逆序对数。 32MB。 解题思路: 出题人题解 众所周知lxl是个毒瘤,Ynoi道道都是神仙题 二次离线莫队。 对于每个区间\([l,r]\),考虑将右端点向右移动1格。 其多出来的部分是\([l,r]\)与\(a_{r+1}\)产生的逆序对(\(a\)与\(b\)产生的逆序对和\(b\)与\(...

295
上一篇: CF613E 题解
下一篇: UVA12096 题解
-Autisia-
博客等级 码龄5年 1粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值