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的更多相关文章

  1. [校内训练20_01_22]ABC

    1.给出序列A,求序列B,使得bi|ai,lcm(b1,b2,...,bn)=lcm(a1,a2,...,an)且字典序最小. 可以发现,对于某个质数p,它有一个最大的次数k,将pk放在尽可能靠后且能 ...

  2. [校内训练20_01_20]ABC

    1.问有多少个大小为N的无标号无根树,直径恰好为L.$N,L \leq 200$ 2.问一个竞赛图中有多少个长度为3.4.5的环.$N \leq 2000$ 3.给出一些直线和单个点A,问这些直线的交 ...

  3. [校内训练20_01_19]ABC

    1.SB题 2.有n个点,m条边,每次加入一条边,你要挑出一些边,使得形成的图每个点度数都为奇数,且最长的边最短. 3.给一个N次多项式,问有多少个质数在任意整数处的点值都是p的倍数,输出它们.$N ...

  4. [4.14校内训练赛by hzwer]

    来自FallDream的博客,未经允许,请勿转载,谢谢. hzwer又出丧题虐人 4道noi....        很奇怪 每次黄学长出题总有一题我做过了. 嗯题目你们自己看看呗 好难解释 ----- ...

  5. [2017.4.7校内训练赛by hzwer]

    来自FallDream的博客,未经允许,请勿转载,谢谢. 报警啦.......hzwer又出丧题虐人啦..... 4道ctsc...有一道前几天做过了,一道傻逼哈希还wa了十几次,勉强过了3题..我好 ...

  6. [3.24校内训练赛by hzwer]

    来自FallDream的博客,未经允许,请勿转载,谢谢. ----------------------------------------------------------------------- ...

  7. 19_04_19校内训练[Game]

    题意 给出n,等概率地生成一个1~n的数列.现在有n个人从左到右站成一排,每个人拿有当前数列位置上的数字,并且一开始都不知道数字是多少(但知道n是多少).从左到右让每个人进行如下选择: 1.选择保留自 ...

  8. 19_04_02校内训练[deadline]

    题意 给出一个二分图,左边为A集合,右边为B集合,要求把A集合中每一个点染为黑白两色中的一种,B集合中的颜色已定.染色后对于原本相邻且颜色相同的点,建立新的二分图,即得到了两个新的二分图,它们是独立的 ...

  9. 平面图转对偶图&19_03_21校内训练 [Everfeel]

    对于每个平面图,都有唯一一个对偶图与之对应.若G‘是平面图G的对偶图,则满足: G'中每一条边的两个节点对应着G中有公共边的面,包括最外部无限大的面. 直观地讲,红色标出来的图就是蓝色标出的图的对偶图 ...

随机推荐

  1. 【Docker】安装MySQL彻底解决3306端口占用问题

    1.问题闪现: 初次up mysql报3306端口被占用 yunduo@YunDuo:~/Work/Learning/Docker/docker_compose$ docker-compose up ...

  2. windows下Qt编译Qtxlsx库和qtxlsx库的使用方法

    最近接了个项目,合作的学长让用Qt写,而其中最重要的需求是将数据库的数据写入excel表格中和将excel的数据导入到数据库中,自己查阅了和多资料,最后决定使用qtxlsx开源库来操作excel,在编 ...

  3. eclipse中如何配置maven

    1.首先需要在自己电脑中安装Maven,下载maven的路径:http://maven.apache.org/download.cgi 2.我们把下载好的文件解压到自己电脑的任意一个盘符中去,我的是e ...

  4. [梁山好汉说IT] 边缘计算在梁山的应用

    [梁山好汉说IT] 边缘计算在梁山的应用 0x00 摘要 梁山泊下四个酒店就是边缘计算在梁山的应用,以朱贵南山酒店为例能看出其"计算实时/省流量/具备智能"等各种优点. 0x01 ...

  5. mysql主从之配置基本环境

    实验环境 master  192.168.132.121 主库 slave     192.168.132.122 从库 一 mysql的使用介绍 1.1 mysql单台服务器特点 缺点 单台服务器如 ...

  6. 【游记】THUWC2019-2 Bystander

    [游记]THUWC2019-2 Bystander Day0/-1 感觉自己怎么样都去不了PKUWC(没错)了,差点放弃模拟面试,在老妈的要求下勉强面试,自我介绍没怎么准备,然后就说 我喜欢唱跳Rap ...

  7. 利用selenium库自动执行滑动验证码模拟登陆

    破解流程 #1.输入账号.密码,然后点击登陆 #2.点击按钮,弹出没有缺口的图 #3.针对没有缺口的图片进行截图 #4.点击滑动按钮,弹出有缺口的图 #5.针对有缺口的图片进行截图 #6.对比两张图片 ...

  8. 关于Springboot找不到mapper.xml问题

    今天在写springboot项目时报错org.apache.ibatis.binding.BindingException: Invalid bound statement (not found),找 ...

  9. Intellij Idea插件使用记录之Alibaba Java Coding Guidelines

    目录 Intellij Idea插件Alibaba Java Coding Guidelines 前言 使用 感谢 Intellij Idea插件Alibaba Java Coding Guideli ...

  10. Git 合并多次提交

    在合并分支的时候,希望将多次提交合并成一个,然后再 cherry-pick 到主分支. 合并分支 develop 分支做开发,可能会进行多次提交,但是在发布或者进行 PR 的时候,我们只希望看到一次提 ...