题目链接:Taotao Picks Apples

题目大意:有n个数,m个操作,每个操作x,q,将x位的数字改为q,输出改完数后数组的递增序列有多长(只能从第一个数开始找,并且必须依次找更大的数)。

思路:我是用离线的方法,先记录x位置之前的有多少个数,然后再求x之后有多少个数,然后输出就行了,之前的好算,之后的不是太好算。
之后的算法:
先用离散这n个数和更改的数,并且将最大的数离散为最小的数,按照求最长严格递增序列的长度来计算,但是要改一下,用lower_bound查找位置的时候,将这个位置之后的数都舍弃(就是这一点没有想到,结果当时没有AC,绝望)。

代码:

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<vector>
using namespace std;
const int maxn=1e6+9;
#define mem(a,b) memset(a,b,sizeof(a))
#define inf 0x3f3f3f3f
typedef long long ll;int a[maxn];
int b[maxn];
int c[maxn*2];
int d[maxn];
int vis[maxn];
struct node
{int x,y,h,sum;
} f[maxn];
vector<int>q[maxn];int main()
{int t;int n,m;scanf("%d",&t);while(t--){mem(vis,0);mem(a,0);mem(b,0);mem(c,0);mem(d,0);scanf("%d%d",&n,&m);int k=0;for(int i=1; i<=n; i++){scanf("%d",&a[i]);c[k++]=a[i];q[i].clear();}for(int i=1; i<=m; i++){scanf("%d%d",&f[i].x,&f[i].y);f[i].h=f[i].sum=0;c[k++]=f[i].y;q[f[i].x].push_back(i);vis[f[i].x]=1;}sort(c,c+k);k=unique(c,c+k)-c;int sum=0;int h=0;for(int i=0; i<=n; i++){if(a[i]>h){h=a[i];sum++;}if(vis[i+1]){for(int j=0; j<q[i+1].size(); j++){f[q[i+1][j]].sum=sum;f[q[i+1][j]].h=h;if(f[q[i+1][j]].y>h){f[q[i+1][j]].sum++;f[q[i+1][j]].h=f[q[i+1][j]].y;}}}}for(int i=1; i<=n; i++)b[n-i+1]=k-(lower_bound(c,c+k,a[i])-c);int p=0;for(int i=1; i<=n+1; i++){if(vis[n-i+1]){for(int j=0; j<q[n-i+1].size(); j++){int p1=lower_bound(c,c+k,f[q[n-i+1][j]].h)-c;int ff=lower_bound(d,d+p,k-p1)-d;f[q[n-i+1][j]].sum+=ff;}}if(i==n+1) break;int p1=lower_bound(d,d+p,b[i])-d;d[p1]=b[i];p=p1+1;}for(int i=1; i<=m; i++)printf("%d\n",f[i].sum);}return 0;
}

hdu - 6406 Taotao Picks Apples(离线+离散+技巧)相关推荐

  1. HDU 6406 Taotao Picks Apples(前缀和+二分)

    HDU 6406 Taotao Picks Apples(前缀和+二分) Time Limit: 2000/2000 MS (Java/Others) Memory Limit: 131072/131 ...

  2. hdu 6406 Taotao Picks Apples 线段树

    hdu 6406 多校八第十题,设d1[ i ]为从a1开始到 ai 的最长递增子序列长度,设d2[ i ]为从ai开始到an的最长递增子序列长度,假设要把ap改为q,可以把序列分为1到p-1和p+1 ...

  3. HDU - 6406 Taotao Picks Apples(线段树区间合并)

    题目链接:点击查看 题目大意:给出一个长度为 n 的数列 a,再给出 m 次询问,每次询问假设如果设置 a[ pos ] = val 的话,那么此时序列中的最长上升子序列是多少,此时的上升子序列指的是 ...

  4. 多校 hdu 6406 Taotao Picks Apples(线段树)

    设d1[ i ]为从a1开始到 ai 的最长递增子序列长度,设d2[ i ]为从ai开始到an的最长递增子序列长度,假设要把ap改为q,可以把序列分为1到p-1和p+1到n两段,可以用线段树找到1到p ...

  5. Taotao Picks Apples HDU - 6406

    K - Taotao Picks Apples 题目链接:HDU - 6406 题意:树上有一排苹果,每个苹果又同的高度,taotao要摘苹果,而且必须从第一个苹果开始摘,然后没遇到一个高度比之前摘得 ...

  6. 【杂题总汇】HDU-6406 Taotao Picks Apples

    [HDU 6406]Taotao Picks Apples 多校赛的时候多写了一行代码就WA了--找了正解对拍,在比赛结束后17分钟AC了? ◇ 题目 +传送门+ <手写翻译> 有n个苹果 ...

  7. 【hdu 6406】Taotao Picks Apples

    [链接] 我是链接,点我呀:) [题意] 题意相当于问你改变一个位置之后. 从左往右扫描最大值.这个最大值会改变多少次. [题解] 假设我们改变的是i这个位置,下面说的a[i]都是改成q之后的a[i] ...

  8. Taotao Picks Apples

    ps:这题的难点,寻找修改的位置之后有多少个苹果能被吃掉,比赛的时候想到的是讨论修改的位置,预处理每个位置的最大值和吃到苹果的数量,记最大值所在的位置为 id, 记修改的位置为 pos,分三种情况讨论 ...

  9. 【数据结构】【模拟】HDU6406 Taotao Picks Apples

    分析: mmp-lwc讲错题意了害我乱码了半个小时... 题意搞清楚了其实这题真心容易. 把每个询问离线了,按照位置从前往后排序,先处理出每个询问的位置及以前能拿的数量,以及当时的最高高度. 然后从前 ...

最新文章

  1. 3.9 神经网络的梯度下降法-深度学习-Stanford吴恩达教授
  2. JavaScript校验身份证,包含省份、长度、出生年月日、校验位的检测、性别、年龄...
  3. 27 | 案例篇:为什么我的磁盘I/O延迟很高?
  4. python 三维向量 交互_Blender实现Nature of Code1.5单位向量[Nature of Node 004]
  5. vim nerdtree 标签_7款vim插件
  6. 20190724算法题存档
  7. dataframe根据时间戳timestamp切分成多个dataframe
  8. opencv之计算机视觉介绍(笔记01)
  9. tornado异步客户端(Future)
  10. python____Django实战(1)
  11. BW型模拟带通滤波器设计的Matlab仿真
  12. Matlab中imhist函数的使用及图像直方图的概念
  13. 51单片机流水灯从原理图到PCB转化
  14. 10款平面设计软件锦集,“学废”一样都可独挡一面!
  15. 论文的字数是怎么算的
  16. INT32_MIN溢出
  17. 【Spark重点难点】你的数据存在哪了?
  18. 不义联盟网站无法连接服务器,不义联盟2总是显示无法连接网络
  19. node启动之后内存占用过高解决方案
  20. Line软件zhuce分析

热门文章

  1. 榆林学院计算机考研资料汇总
  2. 安装、启动与停止Apache服务
  3. 班德尔服务器最新所在地,LOL:班德尔城被誉为四川区,班德尔城服务器在四川,延迟只有4...
  4. ai里怎么做阴影效果_不同场景里的阴影怎么绘制?3种阴影表现方法帮你解惑
  5. 云渲染竟然可以让电影提前上映!
  6. 使用Fiddler和夜神浏览器对搜狐推荐新闻的抓取
  7. 抖音随拍在哪里选音乐,抖音随怕怎么配音乐
  8. 为什么我png图像不能透明_了解png 格式,绝对是让你PPT设计感瞬间爆棚的大杀器...
  9. 计算机怎么把图标放在桌面,“我的电脑”图标怎么添加到桌面?
  10. >>运维管理:Typora工具之画图