atcoder square869120Contest#3 F 寿司
省选round1的时候dalao的推荐——atcoder的题目码量不大,但很巧妙,题目比较难找,挂个链冷静一下:http://s8pc-3.contest.atcoder.jp/tasks/s8pc_3_f
还行吧。。。
好久没写标记下传的线段树了(这次一写就是个双标记)居然能一遍写对核心代码(没开longlongRE了一发,改longlong就A了)
因为本来都是0,就好处理了
对于这道题我的理解是灌水(水泥):每次在a的地方灌b体积的水,如果平就往左灌
感性理解得到单调性(数学归纳可证),而且被灌的地方分成三个阶段:先填平,再竖直向上涨,最后在左边的一段填1
二分填到哪里位置,然后直接(用线段树)模拟就可以了,复杂度两个log
#include <bits/stdc++.h>
#define sum(x,y) que(1,1,n,x,y)
#define change(x,y,z) chan(1,1,n,x,y,z)
#define add(x,y,z) Plus(1,1,n,x,y,z)
#define mid (l+r>>1)
using namespace std;
long long sum[],fg[],ad[];
long long n,m,a,b;
void down(int now,int l,int r)
{
if(fg[now])
{
fg[now]+=ad[now];
fg[now<<]=fg[now];
fg[now<<|]=fg[now];
ad[now]=ad[now<<]=ad[now<<|]=fg[now]=;
sum[now<<]=fg[now<<]*(mid-l+);
sum[now<<|]=fg[now<<|]*(r-mid);
}
if(ad[now])
{
ad[now<<]+=ad[now];
ad[now<<|]+=ad[now];
sum[now<<]+=ad[now]*(mid-l+);
sum[now<<|]+=ad[now]*(r-mid);
ad[now]=;
}
}
void updata(int now)
{
sum[now]=sum[now<<]+sum[now<<|];
}
void chan(int now,int l,int r,int x,int y,long long z)
{
if(l==x && r==y)
{
fg[now]=z;
ad[now]=;
sum[now]=z*(r-l+);
return;
}
down(now,l,r);
if(x<=mid)
chan(now<<,l,mid,x,min(mid,y),z);
if(y>mid)
chan(now<<|,mid+,r,max(mid+,x),y,z);
updata(now);
}
void Plus(int now,int l,int r,int x,int y,long long z)
{
if(l==x && r==y)
{
ad[now]+=z;
sum[now]+=z*(r-l+);
return;
}
down(now,l,r);
if(x<=mid)
Plus(now<<,l,mid,x,min(mid,y),z);
if(y>mid)
Plus(now<<|,mid+,r,max(mid+,x),y,z);
updata(now);
}
long long que(int now,int l,int r,int x,int y)
{
if(l==x && r==y)
return sum[now];
down(now,l,r);
long long ret=;
if(x<=mid)
ret+=que(now<<,l,mid,x,min(y,mid));
if(y>mid)
ret+=que(now<<|,mid+,r,max(x,mid+),y);
return ret;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++)
{
scanf("%d%lld",&a,&b);
int l=,r=a;
for(;l<r;)
if(sum(mid,mid)*(a-mid+)-sum(mid,a)<=b)
r=mid;
else
l=mid+;
b-=sum(l,l)*(a-l+)-sum(l,a);
change(l,a,sum(l,l));
add(l,a,b/(a-l+));
if(b%(a-l+))
add(l,l+b%(a-l+)-,);
}
for(int i=;i<=n;i++)
printf("%lld\n",sum(i,i));
return ;
}
atcoder square869120Contest#3 F 寿司的更多相关文章
- [atcoder contest 010] F - Tree Game
[atcoder contest 010] F - Tree Game Time limit : 2sec / Memory limit : 256MB Score : 1600 points Pro ...
- 【AtCoder】AGC022 F - Leftmost Ball 计数DP
[题目]F - Leftmost Ball [题意]给定n种颜色的球各k个,每次以任意顺序排列所有球并将每种颜色最左端的球染成颜色0,求有多少种不同的颜色排列.n,k<=2000. [算法]计数 ...
- 【AtCoder】AGC005 F - Many Easy Problems 排列组合+NTT
[题目]F - Many Easy Problems [题意]给定n个点的树,定义S为大小为k的点集,则f(S)为最小的包含点集S的连通块大小,求k=1~n时的所有点集f(S)的和取模92484403 ...
- 【AtCoder】ARC067 F - Yakiniku Restaurants 单调栈+矩阵差分
[题目]F - Yakiniku Restaurants [题意]给定n和m,有n个饭店和m张票,给出Ai表示从饭店i到i+1的距离,给出矩阵B(i,j)表示在第i家饭店使用票j的收益,求任选起点和终 ...
- 【AtCoder】ARC082 F - Sandglass
[链接]F - Sandglass [题意]给定沙漏A和B,分别装着a和X-a的沙子,开始时A在上B在下,每秒漏1,漏完不再漏.给定n,有n个时刻ai沙漏倒转.给定m个询问,每次询问给定初值a和时刻t ...
- 【题解】 AtCoder ARC 076 F - Exhausted? (霍尔定理+线段树)
题面 题目大意: 给你\(m\)张椅子,排成一行,告诉你\(n\)个人,每个人可以坐的座位为\([1,l]\bigcup[r,m]\),为了让所有人坐下,问至少还要加多少张椅子. Solution: ...
- 【AtCoder ARC076】F Exhausted? 霍尔定理+线段树
题意 N个人抢M个椅子,M个椅子排成一排 ,第i个人只能坐[1,Li]∪[Ri,M],问最多能坐多少人 $i$人连边向可以坐的椅子构成二分图,题意即是求二分图最大完美匹配,由霍尔定理,答案为$max( ...
- AtCoder abc 141 F - Xor Sum 3(线性基)
传送门 题意: 给出\(n\)个数\(a_i\),现在要将其分为两堆,使得这两堆数的异或和相加最大. 思路: 考虑线性基贪心求解. 但直接上线性基求出一组的答案是行不通的,原因之后会说. 注意到如果二 ...
- [题解] Atcoder AGC 005 F Many Easy Problems NTT,组合数学
题目 观察当k固定时答案是什么.先假设每个节点对答案的贡献都是\(\binom{n}{k}\),然后再减掉某个点没有贡献的选点方案数.对于一个节点i,它没有贡献的方案数显然就是所有k个节点都选在i连出 ...
随机推荐
- 关于for 循环里 线程执行顺序问题
最近在做项目时遇到了 这样的需求 要在一个for循环里执行下载的操作, 而且要等 下载完每个 再去接着走循环.上网查了一些 觉得说的不是很明确.现在把我用到的代码 贴上 希望可以帮到有此需求的开发者 ...
- 2013各大IT公司薪资标准
以此鼓励自己 :http://jinhua.19lou.com/forum-874-thread-115901362964023509-1-1.html 以下三个是老大级别的公司 [微软] 研 ...
- RQNOJ 671 纯洁的买卖:无限背包
题目链接:https://www.rqnoj.cn/problem/671 题意: ALEJ要通过倒卖东西来赚钱. 现在他有m元经费. 有n种物品供他选择,每种物品数量无限. 第i件物品的买入价为c[ ...
- linux 进程学习笔记-进程跟踪
进程跟踪 long ptrace(enum __ptrace_request request, pid_t pid, void *addr, void *data); Linux用ptrace来进行进 ...
- POJ1502(最短路入门题)
MPI Maelstrom Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 7471 Accepted: 4550 Des ...
- mysql的itcast笔记
1 课程回顾 自定义标签&编码实战 1)自定义标签步骤: 1.1 编写标签处理器类,继承SimpleTagSupport类,覆盖doTag方法 1.2 在WEB-INF目录下建立tld文件,在 ...
- 构造函数参数new class[0]的作用
new Class[0];就是传一个长度为1的Class数组过去.内容为null. new Class[0]表示有零个元素的Class数组,即空数组,与传入null结果是一样的,都表示取得无参构造方法 ...
- bootstrap的popover()的使用
有一些选项是通过 Bootstrap 数据 API(Bootstrap Data API)添加或通过 JavaScript 调用的.下表列出了这些选项: 选项名称 类型/默认值 Data 属性名称 描 ...
- GPLT天梯赛 L2-022. 重排链表
L2-022. 重排链表 时间限制 500 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 给定一个单链表 L1→L2→...→Ln-1→Ln,请 ...
- 数据库路由中间件MyCat - 源代码篇(17)
此文已由作者张镐薪授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 调用processInsert(sc,schema,sqlType,origSQL,tableName,pr ...