走楼梯(walk)

题意

给一个长为\(n(1\le n\le 10^5)\)序列\(\{a\}\),每次从中间挖掉\([l,r]\),然后询问最长上升子序列,强制在线。


有一档分是30000和离线,然后考试的时候一直在莫队,发现就是不会删除....想到了离线树套树又懒得打。后来发现莫队只需要实现撤回就可以了..太菜了窝

然后我居然一直没想分块(大雾)

这里直接放原题解了,说的十分详细

年后就去刷ynoi(flag


Code:

#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
using std::max;
const int N=1e5+10;
const int D=320;
int a[N],b[N],pre[N],suc[N],s[N],belong[N],L[N],R[N];
int beel[D][N],beer[D][N],dewl[D][N],dewr[D][N];
int n,m,q,typ,cnt;
struct node
{
int w,p;
node(){}
node(int w,int p){this->p=p,this->w=w;}
bool friend operator <(node a,node b){return a.w==b.w?a.p>b.p:a.w<b.w;}
}yuyuyu[N],yuri[N];
void modify(int x,int d){while(x<=m)s[x]=max(s[x],d),x+=x&-x;}
int query(int x){int mx=0;while(x)mx=max(mx,s[x]),x-=x&-x;return mx;}
int main()
{
freopen("data.in","r",stdin);
freopen("data.out","w",stdout);
scanf("%d%d",&n,&typ);
for(int i=1;i<=n;i++) scanf("%d",a+i),b[i]=a[i];
std::sort(b+1,b+1+n);
m=std::unique(b+1,b+1+n)-b-1;
for(int i=1;i<=n;i++) a[i]=std::lower_bound(b+1,b+1+m,a[i])-b;
for(int i=1;i<=n;i++)
{
pre[i]=query(a[i]-1)+1;
modify(a[i],pre[i]);
}
for(int i=1;i<=m;i++) s[i]=0;
for(int i=n;i;i--)
{
suc[i]=query(m-a[i])+1;
modify(m+1-a[i],suc[i]);
}
int B=sqrt(n)+1,T=(n-1)/B+1;
for(int i=1;i<=T;i++)
{
L[i]=B*(i-1)+1,R[i]=B*i<n?B*i:n;
for(int j=L[i];j<=R[i];j++)
{
yuyuyu[j]=node(a[j],j);
belong[j]=i;
}
std::sort(yuyuyu+L[i],yuyuyu+R[i]+1);
}
for(int i=1;i<=T;i++)
{
memcpy(beel[i],beel[i-1],sizeof beel[i]);
for(int j=L[i];j<=R[i];j++) beel[i][a[j]]=max(beel[i][a[j]],pre[j]);
for(int j=1;j<=m;j++) beel[i][j]=max(beel[i][j],beel[i][j-1]);
for(int j=n;j>R[i];j--) dewl[i][j]=max(dewl[i][j+1],beel[i][a[j]-1]+suc[j]);
}
for(int i=T;i;i--)
{
memcpy(beer[i],beer[i+1],sizeof beer[i]);
for(int j=R[i];j>=L[i];j--) beer[i][a[j]]=max(beer[i][a[j]],suc[j]);
for(int j=m;j;j--) beer[i][j]=max(beer[i][j],beer[i][j+1]);
for(int j=1;j<L[i];j++) dewr[i][j]=max(dewr[i][j-1],pre[j]+beer[i][a[j]+1]);
}
for(int i=n;i;i--) dewl[0][i]=max(dewl[0][i+1],suc[i]);
for(int i=1;i<=n;i++) dewr[T+1][i]=max(dewr[T+1][i-1],pre[i]);
scanf("%d",&q);
for(int ans=0,l,r,lp,rp,i=1;i<=q;i++)
{
scanf("%d%d",&l,&r);
if(typ) l^=ans,r^=ans;
lp=belong[l],rp=belong[r];
ans=max(dewl[lp-1][r+1],dewr[rp+1][l-1]);
cnt=0;
int ll=L[lp],rr=L[rp];
while(ll<=R[lp]&&rr<=R[rp])
{
if(yuyuyu[ll]<yuyuyu[rr]) yuri[++cnt]=yuyuyu[ll++];
else yuri[++cnt]=yuyuyu[rr++];
}
while(ll<=R[lp]) yuri[++cnt]=yuyuyu[ll++];
while(rr<=R[rp]) yuri[++cnt]=yuyuyu[rr++];
int c=0;
for(int j=1;j<=cnt;j++)
{
int p=yuri[j].p;
if(p<l) c=max(c,pre[p]);
if(p>r) ans=max(ans,c+suc[p]);
}
printf("%d\n",ans);
}
return 0;
}

2019.1.11

走楼梯(walk) 解题报告的更多相关文章

  1. Walk 解题报告

    Walk 题目描述 给定一棵 \(n\) 个节点的树,每条边的长度为 \(1\),同时有一个权值\(w\).定义一条路径的权值为路径上所有边的权值的最大公约数.现在对于任意 \(i \in [1,n] ...

  2. 【九度OJ】题目1205:N阶楼梯上楼问题 解题报告

    [九度OJ]题目1205:N阶楼梯上楼问题 解题报告 标签(空格分隔): 九度OJ http://ac.jobdu.com/problem.php?pid=1205 题目描述: N阶楼梯上楼问题:一次 ...

  3. Codeforces Educational Round 92 赛后解题报告(A-G)

    Codeforces Educational Round 92 赛后解题报告 惨 huayucaiji 惨 A. LCM Problem 赛前:A题嘛,总归简单的咯 赛后:A题这种**题居然想了20m ...

  4. 【LeetCode】802. Find Eventual Safe States 解题报告(Python)

    [LeetCode]802. Find Eventual Safe States 解题报告(Python) 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemi ...

  5. Mutual Training for Wannafly Union #1解题报告

    ---恢复内容开始--- q神等人组织的vjudge上的多校训练,题目基本上都来自于CF,#1是上周进行的,参加后感觉收获很多,因为上周准备期中比较忙,解题报告现在补上. 比赛地址(兼题目地址) A题 ...

  6. NOIP2012普及组 (四年后的)解题报告 -SilverN

    本章施工仍未完成 现在的时间是3.17 0:28,我困得要死 本来今天(昨天?)晚上的计划是把整个四道题的题解写出来,但是到现在还没写完T4的高效算法,简直悲伤. 尝试了用floyd写T4,终于大功告 ...

  7. 【NOIP2015】提高day2解题报告

    题目: P1981跳石头 描述 一年一度的“跳石头”比赛又要开始了!这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石.组委会已经选择好了两块岩石作为比赛起点和终点.在起点和终点之间,有 N ...

  8. 【模拟题(电子科大MaxKU)】解题报告【树形问题】【矩阵乘法】【快速幂】【数论】

    目录: 1:一道简单题[树形问题](Bzoj 1827 奶牛大集会) 2:一道更简单题[矩阵乘法][快速幂] 3:最简单题[技巧] 话说这些题目的名字也是够了.... 题目: 1.一道简单题 时间1s ...

  9. 【未完成0.0】Noip2012提高组day2 解题报告

    第一次写一套题的解题报告,感觉会比较长.(更新中Loading....):) 题目: 第一题:同余方程 描述 求关于x的同余方程ax ≡ 1 (mod b)的最小正整数解. 格式 输入格式 输入只有一 ...

随机推荐

  1. MySQL学习笔记04 插入中文时出现ERROR 1366 (HY000)

    1 环境: MySQL Server 6.0  命令行工具 2 问题 :  插入中文字符数据出现如下错误: ERROR 1366 (HY000): Incorrect string value: '\ ...

  2. 使用BAPI批量修改采购信息记录的税率

    业务方面提出需求:由于国家税率从5月份开始16%更改为13%.要求开发一个批量修改采购信息记录税率的功能. 税代码就是税率,J2代表13% 这个需求在ME13里面就可以单个修改,所以可以用BDC,但后 ...

  3. 《基于Cortex-M4的ucOS-III的应用》课程设计 结题报告

    <基于Cortex-M4的ucOS-III的应用>课程设计 结题报告 小组成员姓名:20155211 解雪莹 20155217 杨笛 20155227 辜彦霖 指导教师:娄嘉鹏 一.设计方 ...

  4. 2017-2018-2 20155234『网络对抗技术』Exp6:信息收集与漏洞扫描

    whois查询 whois用来进行域名注册信息查询.以常用的百度为例,输入whois baidu.com可查询到3R注册信息,包括注册人的姓名.组织和城市等信息. 我们可以很清楚地看到baidu的3R ...

  5. 汇编 XOR运算

     XOR运算  按位异或^ 一.按位异或^ 运算符^ 1^1=0;0^0=0; //相同则为0 0^1=1;1^0=1; //不相同为1 1101^0110=1011; // asm_XOR.c ...

  6. JavaScript中call,apply,bind方法的区别

    call,apply,bind方法一般用来指定this的环境. var a = { user:"hahaha", fn:function(){ console.log(this.u ...

  7. 我是SPI,我让框架更加优雅了!

    文章首发于[陈树义的博客],点击跳转到原文<我是 SPI,我让框架更加优雅了!> 自从上次小黑进入公司的架构组之后,小黑就承担起整个公司底层框架的开发工作.就在刚刚,小黑又接到一个任务:做 ...

  8. onSaveInstanceState和onRestoreInstanceState触发的时机

    先看Application Fundamentals上的一段话: Android calls onSaveInstanceState() before the activity becomes vul ...

  9. 高可用Kubernetes集群-15. 部署Kubernetes集群统一日志管理

    参考文档: Github:https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/fluentd-elasticsear ...

  10. c++之洛谷P1068分数线划定

    这是个排序题,做题过程中对sort的理解加深了不少,记下来避免忘记. 题目来源:https://www.luogu.org/problemnew/show/P1068 题目描述 世博会志愿者的选拔工作 ...