线段树双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 ...
随机推荐
- 【Http】队头阻塞(Head of line blocking)多路复用(Multiplexing)
图中第一种请求方式,就是单次发送request请求,收到response后再进行下一次请求,显示是很低效的. 于是http1.1提出了管线化(pipelining)技术,就是如图中第二中请求方 ...
- haproxy笔记
haproxy安装.启动.日志配置 方法1:#安装 yum install haproxy -y #日志配置 sed -i 's/^#$ModLoad imudp/$ModLoad imudp/g' ...
- flask-sqlalchemy报错 Object '<User at xxxx>' is already attached to session '1' (this is '2')
报错: Object '<User at xxxx>' is already attached to session '1' (this is '2') 结论: 两个不同的db ...
- 对业务类进行构造的工厂类BLLFactory
using System; using System.Collections.Generic; using System.Text; using System.Collections; using W ...
- js基本函数和基本方法
日期时间函数(需要用变量调用): var b = new Date(); //获取当前时间 b.getTime() //获取时间戳 b.getFullYear() //获取年份 b.getMonth( ...
- docker内的服务无法获取用户真实IP
原文:blog.baohaipeng.top 背景:MySQL数据库和Redis运行在宿主机上(Linux),server运行在docker内,web运行在Nginx内(Nginx运行在docker内 ...
- 《Javascript权威指南》学习笔记之十七:BOM新成就(1)--client存储数据(Storage实现)
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/u011043843/article/details/30255899 数据构成了web网站的 ...
- Unity应用怎么暂停(Pause)
非常多时候,应用程序或者是游戏须要用上暂停功能,unity提供了不少便捷的方式,列在以下: 1.在editor中,按下pausebutton就可以暂停 2.假设在代码中控制,能够通过设置Time.ti ...
- 【目录】asp.net core系列篇
随笔分类 - asp.net core系列篇 asp.net core系列 68 Filter管道过滤器 摘要: 一.概述 本篇详细了解一下asp.net core filters,filter叫&q ...
- 三、hibernate中持久化类的使用
hibernate的持久化类 持久化:将内存中的一个对象持久化到数据库中的过程,hibernate就是一个用来进行持久化的框架 持久化类:一个Java对象与数据库中表建立了关系映射,那么这个类在hib ...