20191229 考试记录
Posted si-rui-yang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了20191229 考试记录相关的知识,希望对你有一定的参考价值。
T1
试题分析
考虑形式化的来讲就是将 $r$ 号套圈所对应的人连 $[r,r+d]$ ,求是否有二分图完美匹配。
而这个问题可以用 $Hall$ 定理判断,考虑连续与非连续的表达形式,可以发现连续的表达形式一定强与非连续。那么问题变为了求 $sum_{i=l}^r X_ileq (r-l+1+d) imes k$ ,则 $sum_{i=l}^r X_i-kleq dcdot k$ 。
对于连续段的任何一个值均小于 $dcdot k$ ,则可以求最大子段和,线段树解决即可,时间复杂度 $O(qlog n)$ 。
#include<iostream> #include<cstring> #include<cstdio> #include<algorithm> #define int long long using namespace std; inline int read(){ int f=1,ans=0;char c=getchar(); while(c<‘0‘||c>‘9‘){if(c==‘-‘)f=-1;c=getchar();} while(c>=‘0‘&&c<=‘9‘){ans=ans*10+c-‘0‘;c=getchar();} return f*ans; } const int MAXN=500001; struct Segment{ int Ml[MAXN<<2],Mr[MAXN<<2],Maxn[MAXN<<2],sum[MAXN<<2]; inline void pushup(int k){ sum[k]=sum[k<<1]+sum[k<<1|1]; Ml[k]=max(Ml[k<<1],sum[k<<1]+Ml[k<<1|1]);Mr[k]=max(Mr[k<<1|1],sum[k<<1|1]+Mr[k<<1]); Maxn[k]=max(Maxn[k<<1],Maxn[k<<1|1]);Maxn[k]=max(Maxn[k],Mr[k<<1]+Ml[k<<1|1]);return; } inline void Modify(int k,int l,int r,int ps,int w){ if(l==r){Ml[k]+=w,Mr[k]+=w,Maxn[k]+=w,sum[k]+=w;return;} int mid=l+r>>1; if(ps<=mid) Modify(k<<1,l,mid,ps,w);else Modify(k<<1|1,mid+1,r,ps,w); pushup(k);return; } }S; int N,M,K,d; signed main(){ freopen("t1.in","r",stdin); freopen("t1.out","w",stdout); N=read(),M=read(),K=read(),d=read(); for(register int i=1;i<=N;++i) S.Modify(1,1,N,i,-K); for(register int i=1;i<=M;++i){ int x=read(),w=read(); S.Modify(1,1,N,x,w); int res=S.Maxn[1]; if(res<=d*K) printf("TAK ");else printf("NIE "); } return 0; }
T2
试题分析
$duyispace dalao$ 的题解写的很清楚了。
1
以上是关于20191229 考试记录的主要内容,如果未能解决你的问题,请参考以下文章