P3968 [TJOI2014]电源插排
线段树维护最长空区间及左端点位置,这个和$nlongn$的动态最大子序和差不多,就不多解释了
$n$较大哈希优化空间
My complete code:
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<string>
using namespace std;
typedef long long LL;
const LL maxn=3000000;
const LL hs=299987;
inline LL Read(){
LL x=0,f=1; char c=getchar();
while(c<'0'||c>'9'){
if(c=='-') f=-1; c=getchar();
}
while(c>='0'&&c<='9'){
x=(x<<3)+(x<<1)+c-'0'; c=getchar();
}return x*f;
}
struct node{
LL son[2],lx,rx,mx,mxi,col;
}tree[maxn];
LL n,q,nod=1,root=1;
LL que[300000][2];
inline LL Get(LL x){
LL u=x%hs+1;
while(que[u][0]&&que[u][0]!=x)
u=(u+1)%n;
return u;
}
inline void Update(node &now,node son0,node son1,LL l,LL r,LL mid){
if(!son0.col)
son0.lx=son0.rx=son0.mx=(mid-l+1);
if(!son1.col)
son1.lx=son1.rx=son1.mx=(r-mid);
if(son0.mx>son1.mx)
now.mx=son0.mx,now.mxi=son0.mxi;
else
now.mx=son1.mx,now.mxi=son1.mxi;
if(son0.rx+son1.lx>now.mx||(son0.rx+son1.lx==now.mx&&mid-son0.rx+1>now.mxi))
now.mx=son0.rx+son1.lx,
now.mxi=mid-son0.rx+1;
now.lx=son0.lx,now.rx=son1.rx;
if(!son0.col)
now.lx+=son1.lx;
if(!son1.col)
now.rx+=son0.rx;
now.col=son0.col+son1.col;
}
void Change(LL &now,LL l,LL r,LL x,LL c){
if(!now)
now=++nod;
if(l==r){
tree[now].col=c;
tree[now].lx=tree[now].rx=tree[now].mx=!c;
if(!c)
tree[now].mxi=l;
return;
}
LL mid=(l+r)>>1;
x<=mid?Change(tree[now].son[0],l,mid,x,c):Change(tree[now].son[1],mid+1,r,x,c);
Update(tree[now],tree[tree[now].son[0]],tree[tree[now].son[1]],l,r,mid);
}
LL Query(LL now,LL l,LL r,LL lt,LL rt){
if(!now)
return 0;
if(lt<=l&&rt>=r)
return tree[now].col;
LL mid=(l+r)>>1;
LL sum=0;
if(lt<=mid)
sum+=Query(tree[now].son[0],l,mid,lt,rt);
if(rt>mid)
sum+=Query(tree[now].son[1],mid+1,r,lt,rt);
return sum;
}
int main(){
n=Read(),q=Read();
tree[root].mx=n,
tree[root].mxi=1;
while(q--){
LL op=Read();
if(!op){
LL l=Read(),r=Read();
printf("%lld\n",Query(root,1,n,l,r));
}else{
LL x=Get(op);
if(que[x][1]){
Change(root,1,n,que[x][1],0);
que[x][1]=0;
}else{
que[x][0]=op;
LL now=(tree[1].mxi*2+tree[1].mx)>>1;
Change(root,1,n,now,1);
que[x][1]=now;
}
}
}
return 0;
}
P3968 [TJOI2014]电源插排的更多相关文章
- vijos1859[TJOI2014]电源插排
题意:小 M 的实验室有很多电源插排.这些插排的编号从 1 到 N,由左向右排成一排.每天早晨,这些插排都是没有被使用的.每当一个学生来到实验室,他就将自己的笔记本电源插到某一个未被使用的插排上.实验 ...
- [BZOJ 5155][Tjoi2014]电源插排
传送门 网上大部分题解都写得是动态开点线段树,然而像\(MiEcoku\)这么懒惰的显然不会去写线段树... \(\color{green}{solution}\) 我们考虑来点骚操作. 线段树维护的 ...
- TJOI2014
匹配 给出一个\(n(n\leq80)\)个点对\(n\)个点的带权二分图,求所有最大权匹配的交集. 先求出一个最大权匹配,然后枚举每一条匹配中的边,检验删除该边后是否还能形成最大权匹配.如果能则说明 ...
- bzoj5157: [Tjoi2014]上升子序列(树状数组LIS)
5157: [Tjoi2014]上升子序列 题目:传送门 题解: 学一下nlogn的树状数组求最长上生子序列就ok(%爆大佬) 离散化之后,用一个数组记录一下,直接树状数组做 吐槽:妈耶...一开始不 ...
- [TJOI2014]拼图
嘟嘟嘟 一眼看上去像状压dp,然后越想复杂度越不对劲,最后发现和爆搜差不多,索性就写爆搜了,复杂度\(O(\)能过\()\). 别忘了填拼图和回溯的时候只动拼图中是1的部分,不要把\(n * m\)的 ...
- [TJOI2014]Alice and Bob[拓扑排序+贪心]
题意 给出一个序列的以每一项结尾的 \(LIS\) 的长度a[],求一个序列,使得以每一项为开头的最长下降子序列的长度之和最大. \(n\leq 10^5\) . 分析 最优解一定是一个排列,因为如果 ...
- 【bzoj5157】[Tjoi2014]上升子序列 树状数组
题目描述 求一个数列本质不同的至少含有两个元素的上升子序列数目模10^9+7的结果. 题解 树状数组 傻逼题,离散化后直接使用树状数组统计即可.由于要求本质不同,因此一个数要减去它前一次出现时的贡献( ...
- [BZOJ 5158][Tjoi2014]Alice and Bob
传送门 \(\color{green}{solution}\) 贪心 /************************************************************** P ...
- 【[TJOI2014]上升子序列】
这本质上是一个\(dp\) 如果没有"两个上升子序列相同,那么只需要计算一次"这一个性质,那么就很好做了,我们用\(dp[i]\)表示以\(i\)结尾的上升子序列个数,那么就有\( ...
随机推荐
- 报错:LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏 1>
这段时间忙于看文献,没用过VS了. 今天用着用着就报错了: LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏 1> 问度娘,大神给出了解决方法 ...
- OSG+VS2010+win7环境搭建 (转)
OSG+VS2010+win7环境搭建 Win7下 osg+vs2010环境搭建 一.相关准备 a) Osg源码 当前最新版:OpenSceneGraph的3.0.0.zip 下载链接: http:/ ...
- GIS可视化——麻点图
一.引言 目前在客户端绘制POI(Point of Interest,兴趣点)的方式主要是div(Marker的形式).svg.canvas.VML(后边三种就是Vector Layer)几种方式,这 ...
- 2016.10.17 yaml文件里的labels和Pod、RC、Service的对应关系
在看kubernetes的例子时,出现了一个疑问. Pod.RC.Service的yaml文件里,都出现了labels,还有labelSelector.有些不太清楚,因此就这点来学习下. 接上文: ...
- js 选项卡封装
function tab(input,div){ for(var i = 0; i < input.length; i++){ input[i].index = i; input[i].oncl ...
- 微信小程序 - 时间戳转时间
获取当前时间:十位unix时间戳 var timestamps = Math.round(new Date().getTime() / 1000).toString(); 时间戳转时间(官方自带) 使 ...
- java位移操作
http://www.cnblogs.com/kanego/archive/2011/03/21/1990617.html java位移符号解释和举例
- 工作总结 a标签 <a href="/meetingtheme">Back to List</a> 返回上一级 指向 控制器 默认Index @Html.ActionLink("Edit59", "Edit", new { id = item.ID }) 默认当前控制器
@Html.ActionLink("Back to List", "Index") ---- <a href="/doctorinfo&qu ...
- android:scrollbar的一些属性
1. activity_maim.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android ...
- [水]ZOJ1201
给原排列 求 其前面有多少个数比他大. 给每一个数1...2..n前面有多少个数比他大,求原序列 第一个直接统计 第二个从1開始找出第inv[i]+1个空位置放进去就好 printf里的format ...