[校内训练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中有公共边的面,包括最外部无限大的面. 直观地讲,红色标出来的图就是蓝色标出的图的对偶图 ...
随机推荐
- Python11_文件的读写
1.打开和关闭文件(文件对象的方法open,close) file object = open(file_name [, access_mode][, buffering]) 各个参数的细节如下: f ...
- 关于instanface的问题
nstanceof关键字来判断某个对象是否属于某种数据类型.报错 代码如下 package cn.lijun.demo3; import cn.lijun.demo.Person;import cn ...
- 安卓中运行报错Error:Execution failed for task ':app:transformClassesWithDexForDebug'解决
在androidstuio中运行我的未完项目,报错: Error:Execution failed for task ':app:transformClassesWithDexForDebug'.&g ...
- 为什么IIS应用程序池回收时间默认被设置为1740分钟?
作者:斯科特 福赛斯/Scott Forsyth日期:2013/04/06地址:http://weblogs.asp.net/owscott/why-is-the-iis-default-app-po ...
- [译文] C# 已成旧闻, 向前, 抵达 C# 9!
C# 8 is old news. Onward, to C# 9! (C# 已成旧闻, 向前, 抵达 C# 9!) Did you know that planning is already und ...
- CSS3(3)---2D变形(transform)
CSS3(3)---2D变形(transform) 2D变形是CSS3中具有颠覆性的特征之一,它常用的属性有:移动(translate).缩放(scale).旋转(rotate).倾斜 (skew). ...
- .NET设计篇08-线程取消模型和跨线程访问UI
知识需要不断积累.总结和沉淀,思考和写作是成长的催化剂,输出倒逼输入 内容目录 一.线程统一取消模型1.取消令牌2.可以中断的线程1.设计一个中断函数2.创建CancellationTokenSour ...
- Java网络编程——TCP图片上传
1.编写一个服务器端程序,用来接收图片.创建一个监听指定端口号的ServerSocket服务端对象,在while(true)无限循环中持续调用ServerSocket的accept()方法来接收客户端 ...
- ChromeDriver+Selenium安装
介绍 Selenium是一个自动化测试工具,利用它我们可以驱动浏览器执行特定的动作,如点击.下拉等操作. ChromeDriver是一个Chrome浏览器驱动,用于驱动Chrome浏览器完成相应的操作 ...
- 传统远程注入线程,加载DLL
代码根据<windows黑客编程技术详解>来的 远程DLL注入:把我们的恶意DLL强制注入到正常的进程中 每个程序执行时都会调用kernal32.dll,加载DLL时,通过Load ...