【ContestHunter】【弱省胡策】【Round7】
Prufer序列+高精度+组合数学/DP+可持久化线段树
Magic
利用Prufer序列,我们考虑序列中每个点是第几个插进去的,再考虑环的连接方式,我们有$$ans=\sum_{K=3}^n N^{N-K-1}*K*\frac{(K-1)!}{2} * \binom{N}{K}$$
然而直接高精算会爆……
注意到每一项与前一项相差不大,有$now=last*N/(N-K+1)$,所以我们算出来第一项以后不用每次重算后面的了……
//Round7 A
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define rep(i,n) for(int i=0;i<n;++i)
#define F(i,j,n) for(int i=j;i<=n;++i)
#define D(i,j,n) for(int i=j;i>=n;--i)
#define pb push_back
using namespace std;
typedef long long LL;
const int N=;
/*******************template********************/ int n;
struct bint{
LL v[];
int l;
LL& operator [] (int x){return v[x];}
bint(){l=; memset(v,,sizeof v);}
}ans;
const LL Limit=100000000000000LL;
void print(bint& a){
printf("%lld",a[a.l]);
D(i,a.l-,) printf("%014lld",a[i]);
puts("");
}
void mul(bint& a,const int &b){
LL tmp=;
F(i,,a.l){
a[i]=a[i]*b+tmp;
tmp=a[i]/Limit;
a[i]%=Limit;
}
if (tmp) a[++a.l]=tmp;
}
void del(bint& a,const int &b){
LL tmp=,last=;
D(i,a.l,){
tmp=(a[i]+last*Limit)%b;
a[i]=(a[i]+last*Limit)/b;
last=tmp;
}
while(a[a.l]== && a.l) a.l--;
}
bint operator + (bint a,bint b){
int l=max(a.l,b.l);
F(i,,l){
a[i]+=b[i];
if (a[i]>=Limit) a[i]-=Limit,a[i+]++;
}
if (a[l+]>) a.l=l+; else a.l=l;
return a;
}
int main(){
#ifndef ONLINE_JUDGE
freopen("A.in","r",stdin);
freopen("A.out","w",stdout);
#endif
scanf("%d",&n);
bint p,ans;
p[p.l=]=;
F(i,,n-) mul(p,n);
mul(p,n-);
del(p,);
F(k,,n){
mul(p,n-k+);
del(p,n);
ans=ans+p;
// ans+=Pow(n,n-k-1)*k*fac[k-1]/2*C(n,k);
}
print(ans);
return ;
}
Rectangle
QwQ真是一道好题!
先考虑所有的a[i]=1的情况,这时候我们的做法是线段树维护最大连续区间。
然后我们推广一下,用可持久化线段树,对每一个高度都维护一个最大连续区间。
同时再用一个priority_queue来维护一下当前的答案!(官方题解这里说是set……然而我用set给MLE了!什么鬼!!)
//Round7 B
#include<cstdio>
#include<queue>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define rep(i,n) for(int i=0;i<n;++i)
#define F(i,j,n) for(int i=j;i<=n;++i)
#define D(i,j,n) for(int i=j;i>=n;--i)
#define pb push_back
using namespace std;
typedef long long LL;
inline LL getint(){
LL r=,v=; char ch=getchar();
for(;!isdigit(ch);ch=getchar()) if (ch=='-') r=-;
for(; isdigit(ch);ch=getchar()) v=v*-''+ch;
return r*v;
}
const int N=,M=;
/*******************template********************/ int n,m,Max,a[N],b[N],rt[M],cnt; struct node{
int l,r,maxl,maxr,max;
}t[];
#define L t[o].l
#define R t[o].r
#define mid (l+r>>1)
#define lch L,l,mid
#define rch R,mid+1,r
void build(int &o,int l,int r){
o=++cnt;
t[o].maxl=t[o].maxr=t[o].max=r-l+;
if (l==r) return;
build(lch);
build(rch);
}
inline void maintain(int o,int l,int r){
t[o].maxl=t[L].maxl; t[o].maxr=t[R].maxr;
if (t[L].maxl==mid-l+) t[o].maxl+=t[R].maxl;
if (t[R].maxr==r-mid) t[o].maxr+=t[L].maxr;
t[o].max=max(t[L].maxr+t[R].maxl,max(t[L].max,t[R].max));
}
void update(int &o,int l,int r,int pos){
t[++cnt]=t[o], o=cnt;
if (l==r){t[o].maxl=t[o].maxr=t[o].max=;return;}
if (pos<=mid) update(lch,pos);
else update(rch,pos);
maintain(o,l,r);
}
bool cmp(int x,int y){return a[x]<a[y];}
struct data{
LL v;
int id;
data(LL x=,int id=):v(x),id(id){}
bool operator < (const data &b)const{
return v<b.v || (v==b.v && id>b.id);
}
};
priority_queue<data>Q;
int main(){
#ifndef ONLINE_JUDGE
freopen("B.in","r",stdin);
freopen("B.out","w",stdout);
#endif
n=getint(); m=getint();
Max=;
F(i,,n){
a[i]=getint();
Max=max(Max,a[i]);
b[i]=i;
}
sort(b+,b+n+,cmp);
build(rt[],,n); LL ans=;
for(int i=,j=;i<=Max;i++){
rt[i]=rt[i-];
for(;a[b[j]]==i- && j<=n;j++)
update(rt[i],,n,b[j]);
Q.push(data((LL)t[rt[i]].max*i,i));
// printf("height=%d val=%lld\n",i,(LL)t[rt[i]].max*i);
} data x=Q.top();
printf("%lld\n",ans=x.v);
LL pos;
while(m--){
pos=getint()^ans;
update(rt[a[pos]],,n,pos);
Q.push(data((LL)t[rt[a[pos]]].max*a[pos],a[pos]));
a[pos]--;
for(x=Q.top(); (LL)x.id*t[rt[x.id]].max!=x.v;Q.pop(),x=Q.top());
ans=Q.top().v;
printf("%lld\n",ans);
}
return ;
}
【ContestHunter】【弱省胡策】【Round7】的更多相关文章
- 弱省胡策 Magic
弱省胡策 Magic 求\(n\)个点\(n\)的条边的简单联通图的个数. 毒瘤,还要写高精. 我们枚举环的大小\(k\),\(\displaystyle ans=\sum_{k=3}^nC_n^k ...
- 【弱省胡策】Round #5 Count
[弱省胡策]Round #5 Count 太神仙了. \(DP\)做法 设\(f_{n,m,d,k}\)表示\(n*m\)的矩阵,填入第\(k\)个颜色,并且第\(k\)个颜色最少的一列上有\(d\) ...
- luoguP3769 [CH弱省胡策R2]TATT
luoguP3769 [CH弱省胡策R2]TATT PS:做这题前先切掉 P4148简单题,对于本人这样的juruo更助于理解,当然dalao就当练练手吧 题目大意: 现在有n个四维空间中的点,请求出 ...
- 【ContestHunter】【弱省胡策】【Round0】(A)&【Round1】(B)
DP+容斥原理or补集转化?/KD-Tree 唔……突然发现最早打的两场(打的最烂的两场)没有写记录……(太烂所以不忍记录了吗... 还是把搞出来了的两道题记录一下吧= =勉强算弥补一下缺憾…… Ro ...
- 【ContestHunter】【弱省胡策】【Round3】(C)
容斥原理+Fib Orz HE的神犇们 蒟蒻只能改出来第三题……实在太弱 官方题解:http://pan.baidu.com/s/1o6MdtQq fib的神奇性质……还有解密a[i]的过程……这里就 ...
- 【ContestHunter】【弱省胡策】【Round2】
官方题解:http://wyfcyx.is-programmer.com/posts/95490.html A 目前只会30分的暴力……DP好像很神的样子0.0(听说可以多次随机强行算? //Roun ...
- 【ContestHunter】【弱省胡策】【Round8】
平衡树维护凸壳/三角函数+递推+线段树 官方题解:http://pan.baidu.com/s/1sjQbY8H 洛阳城里春光好 题目大意:(其实出题人已经写的很简短了……直接copy的-_-.sor ...
- 【ContestHunter】【弱省胡策】【Round6】
KMP/DP+树链剖分+线段树/暴力 今天考的真是……大起大落…… String QwQ题意理解又出错了……(还是说一开始理解了,后来自己又忘了为什么是这样了?) 反正最后的结果就是……我当成:后面每 ...
- 【ContestHunter】【弱省胡策】【Round5】
反演+FFT+构造+DP 写了这么多tag,其实我一个也不会 A 第一题是反演……数据范围10W,看着就有种要用FFT等神奇算法的感觉……然而蒟蒻并不会推公式,只好写了20+10分的暴力,然而特判30 ...
随机推荐
- PBR Step by Step(四)Lambertian反射模型
光照可分为局部光照和全局光照. 局部光照:直接照射到物体表面的光照 全局光照:物体表面受周围环境影响的光照 左图中点x接收到周围环境的光线照射,来自周围表面的反射光照称为全局光照:右图中点x接收来自太 ...
- AWT事件模型
1.什么是事件 1)事件------描述发生了什么的对象 [事件与异常类似,是由一个个类构成的,当一个事件产生的时候,实际上是由对应的那个事件的类来生成了一个对象,这个对象封装了与这个事件相关的信息, ...
- 2977 二叉堆练习1 codevs
题目描述 Description 已知一个二叉树,判断它是否为二叉堆(小根堆) 输入描述 Input Description 二叉树的节点数N和N个节点(按层输入) 输出描述 Output Descr ...
- VMware vsphere Hypervisor、VMware vsphere和VMware Workstation小记
VMware Workstation软件需要依赖于宿主操作系统之上. VMware vSphere是VMware公司推出一套服务器虚拟化解决方案,它是可以直接独立安装和运行在祼机上的系统. VMwar ...
- BZOJ2915 : [Poi1997] gen
设f[i][j]表示串ij可以由哪些字母成长过来,用二进制压位表示. 设g[i][j]表示给定串中[i,j]这个区间一开始可以由哪些字母成长多来,用二进制压位表示. 设h[i]表示给定串前i位最少需要 ...
- 20172308《Java软件结构与数据结构》第二周学习总结
教材学习内容总结 第 3 章 集合概述--栈 集合:一种聚集.组织了其他对象的对象 软件系统中的另一个类或对象通过集合预定的方式与该集合进行交互来使用这些集合 多年以来软件开发和研究人员定义了一些特定 ...
- 2013-2014 ACM-ICPC, NEERC, Southern Subregional Contest Problem C. Equivalent Cards 计算几何
Problem C. Equivalent Cards 题目连接: http://www.codeforces.com/gym/100253 Description Jane is playing a ...
- STM32F1XX devices vector table for EWARM toolchain.
;******************** (C) COPYRIGHT 2014 STMicroelectronics ******************* ;* File Name : start ...
- golang 引用相对路径package
My $GOPATH is "/Users/peter/goworkspace" Golang 版本是: go version go1.6 darwin/amd64 在这个work ...
- Revit API找到风管穿过的墙(当前文档和链接文档)
start [Transaction(TransactionMode.Manual)] [Regeneration(RegenerationOption.Manual)] public class c ...