[cf453e]Little Pony and Lord Tirek
来自FallDream的博客,未经允许,请勿转载,谢谢。
更博客= =
有n个数,每个数字都有一个初始大小ai和最大值mi,然后每秒会增加ri,你需要回答m个发生时间依此增大的询问,每次询问区间和并且将区间的所有数字变成0.
n,m<=10^5
考虑直接用set维护颜色段,这样操作到的段数是O(n)的。然后特殊处理开始的情况,就变成了若干个询问,每次询问一个区间的数全部从0开始,一定时间之后的和。
将这些询问排序,并且将所有数字到达最大值的时间排序,用两棵线段树来模拟就行了,复杂度O(nlogn)
#include<algorithm>
#include<iostream>
#include<cstdio>
#include<cmath>
#include<set>
#define MN 100000
#define N 131072
using namespace std;
inline int read()
{
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
struct data{int l,r,t,x;
data(int _l,int _r,int _t,int _x){l=_l;r=_r;t=_t;x=_x;}
data(int k){l=k;r=;}
bool operator <(const data&b)const{return l==b.l?r<b.r:l<b.l;}
};
set<data> s;long long Ans[MN+],T1[N*+],T2[N*+];
int n,m,top,a[MN+],mx[MN+],R[MN+],rk[MN+],tms[MN+];
struct ques{int l,r,t,id;}q[MN*+];
int Calc(int t,int x,int r,int m){return (int)min((long long)m,x+1LL*r*t);}
bool cmp(const ques&a,const ques&b){return a.t<b.t;}
bool cmp2(int x,int y){return tms[x]<tms[y];}
void Renew(long long*T,int x,int v){for(T[x+=N]+=v;x>>=;)T[x]=T[x<<]+T[x<<|];}
long long Query(long long*T,int l,int r)
{
long long sum=;
for(l+=N-,r+=N+;l^r^;l>>=,r>>=)
{
if(~l&) sum+=T[l+];
if( r&) sum+=T[r-];
}
return sum;
}
int main()
{
n=read();
for(int i=;i<=n;++i)
{
a[i]=read();mx[i]=read();R[i]=read();tms[i]=R[i]?(int)ceil((double)mx[i]/R[i]):2e9;
s.insert(data(i,i,,a[i])); rk[i]=i;
}
m=read();
for(int i=;i<=m;++i)
{
int t=read(),l=read(),r=read();
set<data>::iterator it=s.lower_bound(data(l));
for(;it!=s.end()&&it->l<=r;it=s.lower_bound(data(l)))
{
if(it->r>r) s.insert(data(r+,it->r,it->t,it->x));
if(it->r==it->l) Ans[i]+=Calc(t-it->t,it->x,R[it->r],mx[it->r]);
else q[++top]=(ques){it->l,min(it->r,r),t-it->t,i};
s.erase(it);
}
for(;it!=s.begin()&&(--it)->r>=l;it=s.lower_bound(data(l)))
{
if(it->r>r) s.insert(data(r+,it->r,it->t,it->x));
if(it->l<l) s.insert(data(it->l,l-,it->t,it->x));
q[++top]=(ques){max(it->l,l),min(r,it->r),t-it->t,i};
s.erase(it);
}
s.insert(data(l,r,t,));
}
sort(rk+,rk+n+,cmp2);
sort(q+,q+top+,cmp);
for(int i=;i<=n;++i) Renew(T1,i,R[i]);
for(int i=,j=;i<=top;)
if(j<=n&&tms[rk[j]]<=q[i].t)
{
Renew(T1,rk[j],-R[rk[j]]);
Renew(T2,rk[j],mx[rk[j]]);
++j;
}
else
{
Ans[q[i].id]+=1LL*q[i].t*Query(T1,q[i].l,q[i].r)+Query(T2,q[i].l,q[i].r);
++i;
}
for(int i=;i<=m;++i) printf("%lld\n",Ans[i]);
return ;
}
[cf453e]Little Pony and Lord Tirek的更多相关文章
- Codeforces 453E - Little Pony and Lord Tirek(二维线段树+ODT)
Codeforces 题目传送门 & 洛谷题目传送门 一道难度 *3100 的 DS,而且被我自己搞出来了! 不过我终究还是技不如人,因为这是一个 \(n\log^2n\) + 大常数的辣鸡做 ...
- 2021record
2021-10-14 P2577 [ZJOI2004]午餐 2021-10-13 CF815C Karen and Supermarket(小小紫题,可笑可笑) P6748 『MdOI R3』Fall ...
- CF数据结构练习
1. CF 438D The Child and Sequence 大意: n元素序列, m个操作: 1,询问区间和. 2,区间对m取模. 3,单点修改 维护最大值, 取模时暴力对所有>m的数取 ...
- CF453(Div1 简单题解)
A .Little Pony and Expected Maximum pro:给定M,N,表示一个M面的骰子,甩N次,问出现的最大的数的期望. sol:容斥,f(i)表示最大数<=i的期望,那 ...
- CF453C Little Pony and Summer Sun Celebration (DFS)
http://codeforces.com/contest/456 CF454E Codeforces Round #259 (Div. 1) C Codeforces Round #259 (Di ...
- CF453B Little Pony and Harmony Chest (状压DP)
CF453B CF454D Codeforces Round #259 (Div. 2) D Codeforces Round #259 (Div. 1) B D. Little Pony and H ...
- codeforces 374A Inna and Pink Pony 解题报告
题目链接:http://codeforces.com/problemset/problem/374/A 题目意思:给出一个 n 行 m 列 的棋盘,要将放置在坐标点为(i, j)的 candy 移动 ...
- CodeForces 454C Little Pony and Expected Maximum
Little Pony and Expected Maximum Time Limit:1000MS Memory Limit:262144KB 64bit IO Format:%I6 ...
- Codeforces Round #259 (Div. 2) C - Little Pony and Expected Maximum (数学期望)
题目链接 题意 : 一个m面的骰子,掷n次,问得到最大值的期望. 思路 : 数学期望,离散时的公式是E(X) = X1*p(X1) + X2*p(X2) + …… + Xn*p(Xn) p(xi)的是 ...
随机推荐
- Java课程设计报告——购物车
1.码云GIT提交 Git地址 2基本框架 3.基本界面 1.主界面: 2.购物车界面: 3.添加商品界面: 4.删除商品界面: 5.修改商品界面: 6.商城界面: 7.购物车显示界面: 4.代码解释 ...
- jav音频格式转换 ffmpeg 微信录音amr转mp3
项目背景: 之前公司开发了一个微信公众号,要求把js-sdk录音文件在web网页也能播放.众所周知,html的<audio>标签ogg,mp3,wav,也有所说苹果safari支持m4a格 ...
- 201421123042 《Java程序设计》第2周学习总结
1. 本周学习总结 以几个关键词描述本周的学习内容.并将关键词之间的联系描述或绘制出来. 原则:少而精,自己写.即使不超过5行也可,但请一定不要简单的复制粘贴. 引用类型 引用类型是指向一个对象,感觉 ...
- RAID 损坏后如何对物理硬盘做完整镜像
"磁盘阵列是由很多价格较便宜的磁盘,组合成一个容量巨大的磁盘组,利用个别磁盘提供数据所产生加成效果提升整个磁盘系统效能.利用这项技术,将数据切割成许多区段,分别存放在各个硬盘上." ...
- CISCO路由器练习
前言: 总结了昨天的学习和今天的单臂路由 写了今天的文章. 目录: 路由器的基本配置 单臂路由的练习 正文: 路由器基本配置 环境要求 cisco模拟器 2台交换机 2台PC 1台路由器 路由器介绍: ...
- OO第一次总结
第一次作业: 第一次作业的指导书发下来之后我按着上面的步骤一步一步的做了之后发现项目拉下来了,怎么开始码代码呢...然后在舍友的帮助下才知道怎么建包建类,然后对Java的语法又不是很了解,于是就先把C ...
- python 编码规范整理
PEP8 Python 编码规范 一 代码编排1 缩进.4个空格的缩进(编辑器都可以完成此功能),不要使用Tap,更不能混合使用Tap和空格.2 每行最大长度79,换行可以使用反斜杠,最好使用圆括号. ...
- 关于tomcat和jetty的乱码问题
现象:windows 下的tomcat和jetty默认安装都有问题,linux下的没有问题. 分析:操作系统字符集发生作用了,程序有些处理可能使用了该默认字符集,导致两边现象不一致,建议排查,先尝试通 ...
- OAuth2.0学习(1-7)授权方式4-客户端模式(Client Credentials Grant)
授权方式4-客户端模式(Client Credentials Grant) 客户端模式(Client Credentials Grant)指客户端以自己的名义,而不是以用户的名义,向"服务提 ...
- OAuth2.0学习(1-3)OAuth2.0的参与者和流程
OAuth(开放授权)是一个开放标准.允许第三方网站在用户授权的前提下访问在用户在服务商那里存储的各种信息.而这种授权无需将用户提供用户名和密码提供给该第三方网站. OAuth允许用户提供一个令牌给第 ...