链接:https://codeforces.com/contest/1288/problem/E

题意:序列p的长度为n,初始序列为1 2 3 4 ...n,然后有m次操作,每次指定序列中一个数移动到第一位,然后剩下的所有序列往后移动一位,求每个数在出现过的所有历史序列中所在位置索引的最大值和最小值。

思路:用一个树状数组维护序列的位置,在序列的前面空出m个位置,目的是留给m次操作移动数字到前m个位置。初始时,在输入数据的时候,用pos数组记录所有数字的位置为 i+m,然后树状数组的 i+m处更新+1代表第i+m个位置放了一个数,每次移动操作时,在该位置做-1的更新操作表示此处清零,该位置已经没有放置数字,然后可以用树状数组查询该位置前面部分的区间和,就表示前面有多少个数,自然而然就可以更新这个数出现位置的最大值了,而最小值更新则为:如果进行了移动操作,那么该数字位置的最小值就是1了,因为把该数字放在了序列最前面,最后再遍历一遍所有数字,查询更新一些没有进行移动操作的数出现位置的最大值。具体看代码

AC代码:

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#include<queue>
using namespace std;
typedef long long ll;
const int maxn = 3e5+;
int t[maxn*];
int ansMin[maxn+],ansMax[maxn+];
int n,m;
inline int lowbit(int x){
return x&(-x);
}
void add(int x,int k){
while(x<=n+m){
t[x] = t[x] + k;
x +=lowbit(x);
}
}
int get(int x){
int ans = ;
while(x>=){
ans+=t[x];
x-=lowbit(x);
}
return ans;
}
int main(){
scanf("%d%d",&n,&m);
int pos[n+m+];
for(int i = ;i<=n;i++){
pos[i] = i + m;//初始化元素的位置,pos[i]为元素i的位置
ansMin[i] = i,ansMax[i] = i;
add(i + m,);//树状数组该位置更新+1
}
for(int i = ;i<m;i++){
int temp;
scanf("%d",&temp);
ansMin[temp] = ;
add(pos[temp],-);//该位置-1,
add(m-i,);//移动到最前面,树状数组+1
ansMax[temp] = max(ansMax[temp],get(pos[temp]));//查询前面有多少个元素,做max的更新
pos[temp] = m - i;//更新位置
}
for(int i = ;i<=n;i++){
ansMax[i] = max(ansMax[i],get(pos[i]));//最后check没有进行移动操作的元素
}
for(int i = ;i<=n;i++){
printf("%d %d\n",ansMin[i],ansMax[i]);
}
return ;
}

最新文章

  1. 100多个基础常用JS函数和语法集合大全
  2. Leetcode5:Longest Palindromic Substring@Python
  3. 学习 Log4net
  4. python 正则表达式(一)
  5. Git学习笔记总结和注意事项
  6. html表单 2017-03-10PM
  7. Navicat Premium 11破解补丁下载及安装方法
  8. 福州大学软件工程1816 | W班 第8次作业[团队作业,随堂小测——校友录]
  9. Web API中的内容协商
  10. nodejs,koa2常用模块
  11. vue+webpack安装sass过程中遇到权限不够,直接删除node_modus文件夹重新安装,node_modus先取得管理员权限才能删
  12. RESTful Web Services中API的设计原则(转)
  13. ubuntu 下python环境的切换使用
  14. 小峰mybatis(3)mybatis分页和缓存
  15. Android native层动态库注射
  16. tomcat jdbc pool
  17. BZOJ3212: Pku3468 A Simple Problem with Integers(线段树)
  18. 偏前端-vue.js学习之路初级(二)组件化构建
  19. Atitit.导出excel报表的设计与实现java&#160;.net&#160;php&#160;总结
  20. bpclntcmd一条神奇的命令,解决新安装nbu客户端无法连接的问题 (屡试不爽神命令)

热门文章

  1. 洛谷题解 P1024 【一元三次方程求解】
  2. (node:7584) UnhandledPromiseRejectionWarning: MongooseTimeoutError: Server selection timed out after 30000 ms
  3. PHP Magic Method Setter and Getter
  4. ZViZbsPBdS
  5. AI算法:1. 决策树
  6. cmdb实现三种方式
  7. Tram POJ - 1847 spfa
  8. Spring IoC详解
  9. 51Nod 1091 线段的重叠 (贪心)
  10. 虚拟机中的CentOS 7设置固定IP连接最理想的配置(转载)