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. codeforces gym100801 Problem J. Journey to the “The World’s Start”

    传送门:https://codeforces.com/gym/100801 题意: 小明坐地铁,现在有n-1种类型的地铁卡卖,现在小明需要买一种地铁票,使得他可以在t的时间内到达终点站,地铁票的属性为 ...

  2. ArcGIS-PictureMarkerSymbol-向地图添加图片标记

    1.基于4.13 版本 <link rel="stylesheet" href="https://js.arcgis.com/4.13/esri/themes/li ...

  3. .NET Core + docker入门

    下载安装docker docker客户端,今天vpn小水管实在是受不了,于是找了国内的下载地址 配置docker加速器 参考博文Docker for windows10 配置阿里云镜像 docker入 ...

  4. 保存会话数据的两种技术,Cookie,Session

    CookieCookie是客户端技术,服务器把每个用户的数据以cookie的形式写给用户各自的浏览器.当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据去.这样,web资源处理的就是用 ...

  5. CSP201903-2二十四点

    如图所示先处理乘号和除号,再处理加减. #include<bits/stdc++.h> using namespace std; ];int main(){ int n; cin>& ...

  6. vc调用mysql数据库操作例子

    这里归纳了C API可使用的函数 函数 描述 mysql_affected_rows() 返回上次UPDATE.DELETE或INSERT查询更改/删除/插入的行数. mysql_autocommit ...

  7. JS进阶——this绑定了谁?

    一.this的意义 二.寻找this绑定对象 经常听到这么一句话,找this只需要看谁是调用方.当函数被调用时会记录函数调用调用方式.传参包括this等各种属性.有时候this绑定对象情况太抽象,找到 ...

  8. Linux学习_菜鸟教程_3

    我是在UBANTO上运行Linux的,开机启动时按下shift或者Esc都不能进入到grub,没有百度到可靠的教程. 暂时先这样吧.免得我把系统搞坏了,先学点实用的知识~~ Next Chapter

  9. kettle连接oracle数据库报错,ORA-12505

    报错信息: Error connecting to database: (using class oracle.jdbc.driver.OracleDriver) Listener refused t ...

  10. CVE-2019-0708远程桌面服务远程执行代码漏洞exp利用过程

    CVE-2019-0708远程桌面服务远程执行代码漏洞 上边这洞是啥我就不多说了,描述类的自行百度. 受影响系统版本范围: Windows Server 2008 R2 Windows Server ...