[校内训练20_01_17]ABC
1.平面上每次加入直角边平行于坐标轴的等腰直角三角形,每次询问某个点被覆盖了多少次。
大常数算法:O(nlog^2)
#include<bits/stdc++.h>
using namespace std;
const int maxn=3E5+;
int n,q;
inline int read()
{
char ch=getchar();
while(!isdigit(ch))ch=getchar();
int x=ch-'';
ch=getchar();
while(isdigit(ch)){x=x*+ch-'';ch=getchar();}
return x;
}
int G[];
inline void write(int x)
{
int g=;
do{G[++g]=x%;x/=;}while(x);
for(int i=g;i>=;--i)putchar(G[i]+'');putchar('\n');
}
//////////////////////////////////////////////////////////////////////////////////////// splay
int t[],fa[],val[],sum[],son[][],cnt[],TOT;
struct Splay
{
int root;
inline void update(int x)
{
sum[x]=sum[son[x][]]+sum[son[x][]]+cnt[x];
}
inline void rotate(int x)
{
int y=fa[x];
int c=son[y][]==x;
fa[x]=fa[y];
son[y][!c]=son[x][c];
if(son[x][c])
fa[son[x][c]]=y;
if(son[fa[y]][]==y)
son[fa[y]][]=x;
else
son[fa[y]][]=x;
son[x][c]=y;
fa[y]=x;
update(y);
update(x);
if(y==root)
root=x;
}
inline void splay(int x)
{
if(x==root)
return;
while(true)
{
int y=fa[x];
if(y==)
break;
if(y==root)
{
rotate(x);
break;
}
if((son[fa[y]][]==y)==(son[y][]==x))
rotate(y),rotate(x);
else
rotate(x),rotate(x);
}
}
inline void insert(int x)
{
if(root==)
{
root=++TOT;
sum[root]=cnt[root]=;
val[root]=x;
return;
}
int pos=root;
while(true)
{
++sum[pos];
if(val[pos]==x)
{
++cnt[pos];
break;
}
if(x<val[pos])
{
if(son[pos][]==)
{
son[pos][]=++TOT;
sum[TOT]=cnt[TOT]=;
val[TOT]=x;
fa[TOT]=pos;
break;
}
pos=son[pos][];
}
else
{
if(son[pos][]==)
{
son[pos][]=++TOT;
sum[TOT]=cnt[TOT]=;
val[TOT]=x;
fa[TOT]=pos;
break;
}
pos=son[pos][];
}
}
// splay(pos);
}
inline int askSmaller(int x)// how many numbers are <= x
{
int ans=;
int pos=root;
while(pos)
{
if(x<val[pos])
pos=son[pos][];
else
{
ans+=sum[son[pos][]]+cnt[pos];
pos=son[pos][];
}
}
return ans;
}
inline int askBigger(int x)// how many numbers are >= x
{
int ans=;
int pos=root;
while(pos)
{
if(x>val[pos])
pos=son[pos][];
else
{
ans+=sum[son[pos][]]+cnt[pos];
pos=son[pos][];
}
}
return ans;
}
void out()
{
cout<<root<<endl;
cout<<"FA :";for(int i=;i<=TOT;++i)cout<<fa[i]<<" ";cout<<endl;
cout<<"SUM :";for(int i=;i<=TOT;++i)cout<<sum[i]<<" ";cout<<endl;
cout<<"VAl :";for(int i=;i<=TOT;++i)cout<<val[i]<<" ";cout<<endl;
cout<<"SON :";for(int i=;i<=TOT;++i)cout<<son[i][]<<" ";cout<<endl;
cout<<" :";for(int i=;i<=TOT;++i)cout<<son[i][]<<" ";cout<<endl;
}
};
////////////////////////////////////////////////////////////////////////////////////////
struct Segment
{
Splay T[maxn*];
inline void add(int L,int R,int l,int r,int x,int num)
{
if(L<=l&&r<=R)
{
T[num].insert(x);
return;
}
int mid=(l+r)>>;
if(R<=mid)
add(L,R,l,mid,x,num<<);
else if(mid<L)
add(L,R,mid+,r,x,num<<|);
else
add(L,R,l,mid,x,num<<),add(L,R,mid+,r,x,num<<|);
}
inline int askSmaller(int l,int r,int pos,int x,int num)// <=
{
if(l==r)
return T[num].askSmaller(x);
int mid=(l+r)>>;
if(pos<=mid)
return askSmaller(l,mid,pos,x,num<<)+T[num].askSmaller(x);
else
return askSmaller(mid+,r,pos,x,num<<|)+T[num].askSmaller(x);
}
inline int askBigger(int l,int r,int pos,int x,int num)// >=
{
if(l==r)
return T[num].askBigger(x);
int mid=(l+r)>>;
if(pos<=mid)
return askBigger(l,mid,pos,x,num<<)+T[num].askBigger(x);
else
return askBigger(mid+,r,pos,x,num<<|)+T[num].askBigger(x);
}
}T[];
int main()
{
freopen("frontier.in","r",stdin);
freopen("frontier.out","w",stdout);
ios::sync_with_stdio(false);
int useless=read();
n=read(),q=read();
while(q--)
{
int opt=read();
if(opt==)
{
opt=read();
int x=read(),y=read(),z=read();
if(opt==)
{
T[].add(y,y+z,,n,x+y+z,);
T[].add(y,y+z,,n,x-,);
}
else if(opt==)
{
T[].add(y-z,y,,n,x-(y-z),);
T[].add(y-z,y,,n,x-,);
}
else if(opt==)
{
T[].add(y,y+z,,n,x-(y+z),);
T[].add(y,y+z,,n,x+,);
}
else
{
T[].add(y-z,y,,n,x+y-z,);
T[].add(y-z,y,,n,x+,);
}
}
else
{
int x=read(),y=read();
int ans1=T[].askBigger(,n,y,x+y,)-T[].askBigger(,n,y,x,);
int ans2=T[].askBigger(,n,y,x-y,);
int ans3=T[].askSmaller(,n,y,x-y,)-T[].askSmaller(,n,y,x,);
int ans4=T[].askSmaller(,n,y,x+y,);
write(ans1+ans2+ans3+ans4);
}
}
return ;
}
离线做法:还没写
2.
小L 的治疗总共分为N 个阶段,在第i 个阶段,小L 可以做出如下选择:
1.施放治愈法术,为永恒之树恢复xi + S 点生命力
2.为法杖注入能量,令法术强度S 增加yi
3.吟唱圣歌,召唤zi只木精灵
在每个阶段结束时,每只木精灵会使得法术强度S增加1
请帮助小L 计算在N个阶段结束后,能够为永恒之树恢复的最大生命力。
n <= 80
简单题。n^4
#include<bits/stdc++.h>
using namespace std;
typedef long long int ll;
const ll inf=1E15;
ll f[][][*];
ll n,a[],b[],c[];
inline ll max(ll x,ll y)
{
return x>y?x:y;
}
inline void U(ll&x,ll y)
{
x=max(x,y);
}
inline void solve()
{
cin>>n;
for(
int i=;i<=n;++i)
cin>>a[i]>>b[i]>>c[i];
for(int i=;i<=n;++i)
for(int j=;j<=n;++j)
for(int k=;k<=n*n;++k)
f[i][j][k]=-inf;
f[n][][]=;
f[n][][]=a[n];
for(int i=n;i>=;--i)
{
for(int j=;j<=n;++j)
{
for(int k=;k<=n*n;++k)
{
U(f[i-][j+][j+k],f[i][j][k]+a[i-]);
U(f[i-][j][j+k],f[i][j][k]+b[i-]*j);
U(f[i-][j][j+k],f[i][j][k]+c[i-]*(j+k));
}
}
}
ll ans=;
for(int i=;i<=n;++i)
for(int j=;j<=n*n;++j)
ans=max(ans,f[][i][j]);
cout<<ans<<endl;
}
int main()
{
freopen("fortune.in","r",stdin);
freopen("fortune.out","w",stdout);
ios::sync_with_stdio(false);
int useless,T;
cin>>useless>>T;
while(T--)
solve();
return ;
}
3.
在小L 的努力下,永恒之树已经恢复了生命力。
渐渐恢复元气的X 国将进行一次占卜仪式,在仪式中,小L 将取下一段永恒之树的树枝。这里,我们将一段树枝抽象成
一张N个点,M 条边的无向图,恢复了生命力的永恒之树已经脱离了普通的树的范畴,但仍然具备一些树的特性,譬如每条边
都只在至多一个简单环中出现。
小L 将对取下的树枝使用分解魔法,此后,树枝的每一个节点都会在一个时辰内随机的一个时刻,连同其连出去的边一
起被分解。在被分解的瞬间,每个节点会释放出等同于当时还与其连通的节点数量的能量,将这些能量求和,便得到了X 国的
气运。
现在,小L 想要知道,X 国的气运期望会是多少。
请求出X 国气运的期望对998244353 取模的结果。
即求一个仙人掌随机点分治的期望复杂度。
若仙人掌是一棵树,考虑一对点之间的贡献。即x对y产生贡献,即x在被选中前始终与y联通的概率,为$\frac{1}{dist(x,y)}$,dist为两点之间的点的个数。
[校内训练20_01_17]ABC的更多相关文章
- [校内训练20_01_22]ABC
1.给出序列A,求序列B,使得bi|ai,lcm(b1,b2,...,bn)=lcm(a1,a2,...,an)且字典序最小. 可以发现,对于某个质数p,它有一个最大的次数k,将pk放在尽可能靠后且能 ...
- [校内训练20_01_20]ABC
1.问有多少个大小为N的无标号无根树,直径恰好为L.$N,L \leq 200$ 2.问一个竞赛图中有多少个长度为3.4.5的环.$N \leq 2000$ 3.给出一些直线和单个点A,问这些直线的交 ...
- [校内训练20_01_19]ABC
1.SB题 2.有n个点,m条边,每次加入一条边,你要挑出一些边,使得形成的图每个点度数都为奇数,且最长的边最短. 3.给一个N次多项式,问有多少个质数在任意整数处的点值都是p的倍数,输出它们.$N ...
- [4.14校内训练赛by hzwer]
来自FallDream的博客,未经允许,请勿转载,谢谢. hzwer又出丧题虐人 4道noi.... 很奇怪 每次黄学长出题总有一题我做过了. 嗯题目你们自己看看呗 好难解释 ----- ...
- [2017.4.7校内训练赛by hzwer]
来自FallDream的博客,未经允许,请勿转载,谢谢. 报警啦.......hzwer又出丧题虐人啦..... 4道ctsc...有一道前几天做过了,一道傻逼哈希还wa了十几次,勉强过了3题..我好 ...
- [3.24校内训练赛by hzwer]
来自FallDream的博客,未经允许,请勿转载,谢谢. ----------------------------------------------------------------------- ...
- 19_04_19校内训练[Game]
题意 给出n,等概率地生成一个1~n的数列.现在有n个人从左到右站成一排,每个人拿有当前数列位置上的数字,并且一开始都不知道数字是多少(但知道n是多少).从左到右让每个人进行如下选择: 1.选择保留自 ...
- 19_04_02校内训练[deadline]
题意 给出一个二分图,左边为A集合,右边为B集合,要求把A集合中每一个点染为黑白两色中的一种,B集合中的颜色已定.染色后对于原本相邻且颜色相同的点,建立新的二分图,即得到了两个新的二分图,它们是独立的 ...
- 平面图转对偶图&19_03_21校内训练 [Everfeel]
对于每个平面图,都有唯一一个对偶图与之对应.若G‘是平面图G的对偶图,则满足: G'中每一条边的两个节点对应着G中有公共边的面,包括最外部无限大的面. 直观地讲,红色标出来的图就是蓝色标出的图的对偶图 ...
随机推荐
- asdf
[root@host01 ~]# netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' TIME_WAIT 3 CL ...
- schema list validator --python cerberus
工作中需要对如下json结构进行验证: "ActiveStatus" : [ { "effectiveDates" : { "effectiveFro ...
- [梁山好汉说IT] 如何理解脑裂问题
[梁山好汉说IT] 如何理解脑裂问题 这个系列是通过梁山好汉的例子来阐述一些IT概念. 1. 问题描述 Split-brain, 就是在集群环境中,因为异常情况发生后,产生两个子集群.每个子集群都选出 ...
- windows 8.0 mysql 修改root 密码
Mysql 忘记root密码和修改root密码的解决方法(小结) 一.以下是Windows操作系统的操作步骤: 1. 关闭正在运行的MySQL服务-->net stop mysql 2. 打开D ...
- iptables限速
####限速 限制指定时间包的允许通过数量及并发数-m limit --limit n/{second/minute/hour}:指定时间内的请求速率"n"为速率,后面为时间分别为 ...
- 20191121-9 Scrum立会报告+燃尽图 05
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2019fall/homework/10069 一: 组名:组长组 组长:杨天宇 组员:魏新 罗杨美慧 王歆 ...
- 纯css 实现大白
首先是用html 语言来搭建框架 <!DOCTYPE html> <html lang="en"> <head> <meta charse ...
- MicroPython TPYBoard v702实现HTTP应用功能
[Micropython]TPYBoard v702 HTTP应用功能 转载请注明文章来源,更多教程可自助参考docs.tpyboard.com,QQ技术交流群:157816561,公众号:Micro ...
- 【一起学源码-微服务】Ribbon 源码三:Ribbon与Eureka整合原理分析
前言 前情回顾 上一篇讲了Ribbon的初始化过程,从LoadBalancerAutoConfiguration 到RibbonAutoConfiguration 再到RibbonClientConf ...
- linux入门基础指令大全(汇总)
一.文件目录指令 1 pwd指令 pwd 显示当前所在的目录 2 ls指令 ls [选项] [目录或文件] 查看文件信息 ls -a 查看所有文件和目录,包括隐藏的 ls -l 以列表的方式显示 ll ...