线段树双tag+差分数组——cf1208E
写了一上午
/*
对于每个数组a[],先排序然后从大到小把a[i]放进线段树更新
设a[i]的位置是pos,那么其可更新的区间是[pos,w-(li-pos)]
线段树结点保存
tag=now表示当前区间已经被更新满了,无需再往下更新
flag=now表示当前区间被更新过
flag=now-1表示当前区间从未被更新过,可以直接进行覆盖
*/
#include<bits/stdc++.h>
#include<vector>
using namespace std;
#define N 1000005
#define ll long long
ll ans[N];
ll n,w;
struct Node{ll pos,a;};
int cmp(Node a,Node b){return a.a>b.a;}
vector<Node>v[N]; #define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
int tag[N<<],flag[N<<],now;
void pushup(int rt){
if(flag[rt<<]==now || flag[rt<<|]==now)
flag[rt]=now;
if(tag[rt<<]==now && tag[rt<<|]==now)
tag[rt]=now;
}
void update(int L,int R,ll v,int l,int r,int rt){
if(R<L)return;
if(tag[rt]==now)return;//这个区间不用更新了0
if(L<=l && R>=r && flag[rt]!=now){
ans[l]+=v;ans[r+]-=v;
flag[rt]=tag[rt]=now;
return;
}
int m=l+r>>;
if(L<=m)update(L,R,v,lson);
if(R>m)update(L,R,v,rson);
pushup(rt);
} int main(){
cin>>n>>w;
for(int i=;i<=n;i++){
int k;cin>>k;
for(int j=;j<=k;j++){
Node t;
scanf("%lld",&t.a);
t.pos=j;
v[i].push_back(t);
}
} for(int i=;i<=n;i++){
now=i;
sort(v[i].begin(),v[i].end(),cmp);
for(int j=;j<v[i].size();j++){
Node c=v[i][j];
if(c.a<){//开头结尾更新进0
update(,w-v[i].size(),,,w,);
update(v[i].size()+,w,,,w,);
}
update(c.pos,w-v[i].size()+c.pos,c.a,,w,);
}
} for(int i=;i<=w;i++)ans[i]+=ans[i-];
for(int i=;i<=w;i++)cout<<ans[i]<<" ";
}
线段树双tag+差分数组——cf1208E的更多相关文章
- CodeForces - 587E[线段树+线性基+差分] ->(线段树维护区间合并线性基)
题意:给你一个数组,有两种操作,一种区间xor一个值,一个是查询区间xor的结果的种类数 做法一:对于一个给定的区间,我们可以通过求解线性基的方式求出结果的种类数,而现在只不过将其放在线树上维护区间线 ...
- NOIP2012借教室[线段树|离线 差分 二分答案]
题目描述 在大学期间,经常需要租借教室.大到院系举办活动,小到学习小组自习讨论,都需要 向学校申请借教室.教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样. 面对海量租借教室的信息,我们自 ...
- BZOJ_3307_雨天的尾巴_线段树合并+树上差分
BZOJ_3307_雨天的尾巴_线段树合并 Description N个点,形成一个树状结构.有M次发放,每次选择两个点x,y 对于x到y的路径上(含x,y)每个点发一袋Z类型的物品.完成 所有发放后 ...
- Master of GCD 【线段树区间更新 || 差分】
Master of GCD 时间限制: 1 Sec 内存限制: 128 MB 提交: 670 解决: 112 [提交] [状态] [命题人:admin] 题目描述 Hakase has n num ...
- 雨天的尾巴(bzoj3307)(线段树合并+树上差分)
\(N\)个点,形成一个树状结构.有\(M\)次发放,每次选择两个点\(x,y\) 对于\(x\)到\(y\)的路径上(含\(x,y\))每个点发一袋\(Z\)类型的物品.完成 所有发放后,每个点存放 ...
- 【BZOJ】1651: [Usaco2006 Feb]Stall Reservations 专用牛棚(线段树/前缀和 + 差分)
http://www.lydsy.com/JudgeOnline/problem.php?id=1651 很奇妙.. 我们发现,每一时刻的重叠数选最大的就是答案.... orz 那么我们可以线段树维护 ...
- bzoj3307 雨天的尾巴 题解(线段树合并+树上差分)
Description N个点,形成一个树状结构.有M次发放,每次选择两个点x,y 对于x到y的路径上(含x,y)每个点发一袋Z类型的物品.完成 所有发放后,每个点存放最多的是哪种物品. Input ...
- Bzoj 3307 雨天的尾巴(线段树合并+树上差分)
C. 雨天的尾巴 题目描述 N个点,形成一个树状结构.有M次发放,每次选择两个点x,y对于x到y的路径上(含x,y)每个点发一袋Z类型的物品.完成所有发放后,每个点存放最多的是哪种物品. 输入格式 第 ...
- upc组队赛2 Master of GCD 【线段树区间更新 || 差分】
Master of GCD 题目描述 Hakase has n numbers in a line. At fi rst, they are all equal to 1. Besides, Haka ...
随机推荐
- 【和孩子一起学编程】 python笔记--第一天
[该随笔记录本人在阅读过程写的笔记和一些问题,格式比较随意,不定时更新] 由于该书使用的python版本为2.5,本人使用的为3.6. 第一章: 遇到的第一个问题: 1.3节 输出指令: print ...
- mac 格式化U盘
作者:Bailm链接:https://www.zhihu.com/question/27888608/answer/486347894来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载 ...
- 说下vue工程中代理配置proxy
这个代理配置不需要后台进行ngnix代理跳转了,前端可以做.在vue.config.js文件中进行配置,如下: module.exports = { publicPath: process.env.V ...
- css使子元素在父元素居中的各种方法
html结构: <div class="parent"> <div class="child"></div> </di ...
- OpenGL 学习总结
最终呈现画出三角形的一个方式: public void draw(float[] mvpMatrix) { // Add program to OpenGL ES environment GLES20 ...
- linux c开发项目过程总结
软件工程有瀑布模型,迭代模型等. 使用linux c语言来开发项目,当然也是遵循这样的思想,先要问题定义-->需求分析--->原型设计---->编码及单元测试--->集成测试及 ...
- Cent OS 7下安装 mongodb
1.下载MongoDB 安装包 wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.6.8.tgz 2.解压并安装 .tgz 3. ...
- layui表单提交使用form.on('submit(sub)',function (){}) 使用ajax请求时回调不执行的原因及解决方法
ayui使用官方的表单模块form.on('submit(sub)',function (){}) 提交,使用ajax请求向后台请求一个执行结果,根据结果进行处理,出现回调无法执行,并且页面出现了刷新 ...
- sqlserver2012分页注意事项
SELECT orderid, orderdate, custid, empid FROM Sales.Orders ORDER BY orderdate, orderid OFFSET 600 RO ...
- Oracle 用户概念与基本操作
目录 目录 Oracle的用户 通过系统用户来登陆SQLPlus system和sys的区别 查看登陆的用户 启用和锁定一个用户 启用用户 锁定用户 创建用户 修改用户 删除用户 角色权限 常用的用户 ...