Educational Codeforces Round 80 (Rated for Div. 2) E. Messenger Simulator 思维 + 树状数组
传送门
文章目录
- 题意:
- 思路:
题意:
给你nnn个人,一开始位置分别为1,2,...,n1,2,...,n1,2,...,n,让后mmm个操作,每次都将某个人移动到最前面,其他人依次顺延,求每个人能到的最小位置和最大位置。
思路:
可以发现一个人iii的最小的位置要么是111,要么是iii,所以直接判断就好啦。
一个显然的事情就是一个人前面有几个人,排名就是几个人+1+1+1。我们只需要实现一下这个就好啦。将每个人的位置都+m+m+m,让后让tot=mtot=mtot=m,当将一个人移动到前面的时候,就把它移动到tottottot的位置,让后tot−1tot-1tot−1,每次都求一下前缀和即可。单点修改,前缀查询,显然树状数组就可以胜任啦。
//#pragma GCC optimize(2)
#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
#include<map>
#include<cmath>
#include<cctype>
#include<vector>
#include<set>
#include<queue>
#include<algorithm>
#include<sstream>
#include<ctime>
#include<cstdlib>
#define X first
#define Y second
#define L (u<<1)
#define R (u<<1|1)
#define pb push_back
#define mk make_pair
#define Mid (tr[u].l+tr[u].r>>1)
#define Len(u) (tr[u].r-tr[u].l+1)
#define random(a,b) ((a)+rand()%((b)-(a)+1))
#define db puts("---")
#define lowbit(x) ((x)&(-x))
using namespace std;//void rd_cre() { freopen("d://dp//data.txt","w",stdout); srand(time(NULL)); }
//void rd_ac() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//AC.txt","w",stdout); }
//void rd_wa() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//WA.txt","w",stdout); }typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int,int> PII;const int N=1000010,mod=1e9+7,INF=0x3f3f3f3f;
const double eps=1e-6;int n,m,tot;
int a[N],tr[N];
int ans1[N],ans2[N],pos[N];void add(int x,int c)
{for(int i=x;i<N;i+=lowbit(i)) tr[i]+=c;
}int sum(int x)
{int ans=0;for(int i=x;i;i-=lowbit(i)) ans+=tr[i];return ans;
}int main()
{// ios::sync_with_stdio(false);
// cin.tie(0);scanf("%d%d",&n,&m);for(int i=1;i<=m;i++) scanf("%d",&a[i]);for(int i=1;i<=n;i++) ans1[i]=ans2[i]=i,pos[i]=i+m,add(i+m,1);tot=m;for(int i=1;i<=m;i++){int id=a[i]; ans1[id]=1;ans2[id]=max(ans2[id],sum(pos[id]));add(pos[id],-1);pos[id]=tot--;add(pos[id],1);}for(int i=1;i<=n;i++) ans2[i]=max(ans2[i],sum(pos[i]));for(int i=1;i<=n;i++) printf("%d %d\n",ans1[i],ans2[i]);return 0;
}
/**/
Educational Codeforces Round 80 (Rated for Div. 2) E. Messenger Simulator 思维 + 树状数组相关推荐
- Educational Codeforces Round 72 (Rated for Div. 2) D. Coloring Edges dfs树/拓扑找环
传送门 文章目录 题意: 思路: 题意: 给你一张图,你需要给这个图的边染色,保证如果有环那么这个环内边的颜色不全相同,输出染色方案和用的颜色个数. n,m≤5e3n,m\le5e3n,m≤5e3 思 ...
- Educational Codeforces Round 76 (Rated for Div. 2) E. The Contest 思维 + 差分
传送门 文章目录 题意: 思路: 题意: 给你三个长度分别为k1,k2,k3k1,k2,k3k1,k2,k3的数组a,b,ca,b,ca,b,c,其中k1+k2+k3=nk1+k2+k3=nk1+k2 ...
- Educational Codeforces Round 80 (Rated for Div. 2)SZU cf集训round2 C~E(dp,状压+二分,树状数组+逆向思维)
C. Two Arrays 题目大意:就是给定两个整数n和m.计算数组对的数量(a,b),使得: 1 .两个阵列的长度都等于m: 2 .每个数组的每个元素都是1到n(包括1和n)之间的整数: 从1到m ...
- Educational Codeforces Round 80 (Rated for Div. 2) 二分 + 状压
传送门 文章目录 题意: 思路: 题意: 给你nnn个长度为mmm的数组,选出两个来,让他们每一位取maxmaxmax构成新数组bbb,让后最大化bbb的最小值. 思路: 看到m=8m=8m=8,也就 ...
- Educational Codeforces Round 80 (Rated for Div. 2) C. Two Arrays 组合数|dp
传送门 文章目录 题意: 思路: 题意: 给你n,mn,mn,m,让你构造两个数组a,ba,ba,b满足:1<=ai,bi<=n1<=a_i,b_i<=n1<=ai,b ...
- Educational Codeforces Round 81 (Rated for Div. 2) E. Permutation Separation 线段树 + dp
传送门 文章目录 题意: 思路: 题意: 给你一个打乱的排列,每个位置都各有一个价值,让你选择一个分界点,分成p1,p2,...,prp_1,p_2,...,p_rp1,p2,...,pr和pr ...
- Educational Codeforces Round 101 (Rated for Div. 2) D. Ceil Divisions 思维 + 根号数
传送门 题意: 给一个数组ai=ia_i=iai=i,每次可以进行操作ax=⌈axay⌉a_x=\left \lceil \frac{a_x}{a_y} \right \rceilax=⌈aya ...
- Educational Codeforces Round 88 (Rated for Div. 2) C. Mixing Water (思维,数学)
题目链接 题意: 给你一杯热水和一杯冷水,问你最少用几杯水,使得混合后的温度与给定的t温度最相近. (这里至少要用一杯水,并且,交替使用,比如:第一杯只能用热水,第二杯只能用冷水,第三杯只能用热水依次 ...
- Educational Codeforces Round 113 (Rated for Div. 2) D. Inconvenient Pairs 思维
题目大意 给你n条竖直线 m条水平线 k个点 这些点一定在刚才给出的线上 问你有多少个点对 满足之间的距离大于 曼哈顿距离 题目思路 当点在竖直线和水平线的交汇处时 这个点与其他任何点的距离一定等于曼 ...
最新文章
- C语言的集成开发环境
- JDBC 学习(一)
- 利用js对页面数据进行排序
- Java:按值传递还是按引用传递详细解说
- WSDL2Java操作指南
- cbv继承view是哪个包_包你一眼就心动!两款帅爆国产轿车来袭,选谁都不错
- Windows使用tensorboard的一点小心得
- 北大青鸟学java是用什么课程_来自北大青鸟参加过JAVA课程的学长建议
- 红米Note8手机图纸-电路原理图+主板元件位号图
- 灵敏度和特异度计算方法
- Gmail企业邮箱让中小企业免费拥有企业邮箱
- 可能是讲分布式系统最到位的一篇文章
- 【做小游戏在Godot中遇到的问题第一篇】
- android测试类--Method setUp in android.test.AndroidTestCase not mocked
- ipad服务器的显示器,Air Display怎么用 iPad怎么分屏显示 值得收藏
- CSS3健身男孩平板卧推js特效
- 计算机硬件培训ttp,通信新技术优秀教学平台(TTP).doc
- iOS - navigationController简单使用
- 创建Vue项目的两种方法(镜像和官网)
- hdmi转双mipi转接_视频转换 HDMI 转 MIPI ADV7480
热门文章
- CLion 中使用 C++ 版本的 OpenCV
- php如何避免时间重复,如何避免/停止php和html的重复插入?
- 高空真人特技表演的这些冷知识,你都知道吗?
- 面对焦虑,我们能做什么?
- 河流为什么是弯曲的?
- 数理思维这样培养才有效,从小就赢在方法上,每本不足3元!!
- 《SAS编程与数据挖掘商业案例》学习笔记之三
- mysql select 反选_JQuery实现全选、全不选和反选功能
- php pdo 查询语句,PDO:预处理语句(参数化查询)
- php防止快速刷新代码(分享)_php防止网站被刷新的方法汇总