2019hdu第二场
Posted zsben991126
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2019hdu第二场相关的知识,希望对你有一定的参考价值。
10:签到求n!取模
#include <iostream> #include <iterator> #include <algorithm> typedef long long ll; using namespace std; const ll mod=1e6+3; ll n; ll res[mod+3]; int main() res[0]=1%mod; res[1]=1%mod; for(int i=2;i<=mod+1;i++) res[i]=(res[i-1]*i)%mod; while(scanf("%lld",&n)!=EOF) if(n>=mod) printf("0\n"); else printf("%lld\n",res[n]); return 0;
11:签到,主席树维护a[]数组,然后对于每个q,去询问区间第1大,第2大,第3大,如果不能组成三角形,则询问区间第4大,依次类推,询问次数最多为O(logn),总复杂度O(qlogn*logn)
/* 主席树维护区间[l,r] 查找第1大,第2大,第3大,第4大 */ #include<bits/stdc++.h> using namespace std; #define maxn 100005 #define ll long long ll a[maxn],n,b[maxn]; int tot,m,rt[maxn]; struct Nodeint lc,rc,sum;t[maxn*25]; int update(int last,int l,int r,int pos) int now=++tot; t[now]=t[last];t[now].sum++; if(l==r)return now; int mid=l+r>>1; if(pos<=mid) t[now].lc=update(t[last].lc,l,mid,pos); else t[now].rc=update(t[last].rc,mid+1,r,pos); return now; int query(int st,int ed,int l,int r,int k) if(l==r)return l; int mid=l+r>>1; int sum=t[t[ed].lc].sum-t[t[st].lc].sum; if(k<=sum)return query(t[st].lc,t[ed].lc,l,mid,k); else return query(t[st].rc,t[ed].rc,mid+1,r,k-sum); int build(int l,int r) int now=++tot; t[now].lc=t[now].rc=t[now].sum=0; if(l==r)return now; int mid=l+r>>1; t[now].lc=build(l,mid); t[now].rc=build(mid+1,r); return now; int main() int q; while(scanf("%d%d",&n,&q)==2) for(int i=1;i<=n;i++) scanf("%d",&a[i]); b[i]=a[i]; sort(b+1,b+1+n); m=unique(b+1,b+1+n)-(b+1); //cout<<m<<endl; for(int i=1;i<=n;i++) a[i]=lower_bound(b+1,b+1+m,a[i])-b; tot=0; rt[0]=build(1,m); for(int i=1;i<=n;i++) rt[i]=update(rt[i-1],1,m,a[i]); int l,r; while(q--) scanf("%d%d",&l,&r); if(r-l+1<3)puts("-1");continue; int len=r-l+1; ll x=b[query(rt[l-1],rt[r],1,m,len)],y=b[query(rt[l-1],rt[r],1,m,len-1)],z=b[query(rt[l-1],rt[r],1,m,len-2)]; len-=3; while(x>=y+z) if(len==0)break; x=y,y=z;z=b[query(rt[l-1],rt[r],1,m,len)]; len--; if(x>=y+z)puts("-1"); else cout<<x+y+z<<‘\n‘;
12:队友过的规律题
以上是关于2019hdu第二场的主要内容,如果未能解决你的问题,请参考以下文章
2019杭电多校第二场hdu6602 Longest Subarray(线段树)