【模拟8.03】数颜色(vector//主席树)
才知道vector在插入值后是可以直接修改的...
那就很简单了
用vector的lowerbound这样的二分操作,提前储存每个颜色的位置
发现交换相对位置不变
#include<iostream>
#include<cstdio>
#include<string>
#include<algorithm>
#include<cmath>
#include<vector>
#include<map>
#include<set>
#include<cstring>
#define MAXN 310001
#define int long long
#define ps push_back
using namespace std;
int n,m;vector<int>v[MAXN];int a[MAXN];
int find(int l,int r,int x)
{
return upper_bound(v[x].begin(),v[x].end(),r)-lower_bound(v[x].begin(),v[x].end(),l);
}
int kx(int l,int x)
{
return lower_bound(v[x].begin(),v[x].end(),l)-v[x].begin();
}
signed main()
{
scanf("%lld%lld",&n,&m);
for(int i=1;i<=n;++i)
{
scanf("%lld",&a[i]);
v[a[i]].ps(i);
}
for(int i=1;i<=m;++i)
{
int orz;
int l,r,x;
scanf("%lld",&orz);
if(orz==1)
{
scanf("%lld%lld%lld",&l,&r,&x);
printf("%lld\n",find(l,r,x));
}
else
{
scanf("%lld",&l);
if(a[l]==a[l+1])continue;
int me=kx(l,a[l]);
int me1=kx(l+1,a[l+1]);
//printf("me=%lld\nme1=%lld\n",me,me1);
//printf("v[%lld][%lld]=%lld\n",a[l+1],me1,v[a[l+1]][me1]);
v[a[l]][me]=l+1;
v[a[l+1]][me1]=l;
swap(a[l],a[l+1]);
}
}
}
还有主席树做法(我怎么没想到.....)
ps:超时了,只是存板子(它竟然卡我....)
#include<iostream>
#include<cstdio>
#include<string>
#include<algorithm>
#include<cmath>
#include<vector>
#include<map>
#include<set>
#include<cstring>
#define MAXN 1000001
#define int long long
#define ps push_back
using namespace std;
struct node
{
int ls,rs,val;
}T[20*MAXN];
int root[MAXN];int a[MAXN];
int tot=0;int n,m;
void insert(int &now,int l,int r,int x,int k,int last)
{
now=++tot;
T[now]=T[last];
int mid=(l+r)>>1;
if(l==r)
{
T[now].val+=k;
return ;
}
if(x<=mid)insert(T[now].ls,l,mid,x,k,T[last].ls);
else insert(T[now].rs,mid+1,r,x,k,T[last].rs);
}
int query(int x,int l,int r,int val)
{
if(l==r){return T[x].val;}
int mid=(l+r)>>1;
if(val<=mid)return query(T[x].ls,l,mid,val);
else return query(T[x].rs,mid+1,r,val);
}
int maxn=0;
signed main()
{
scanf("%lld%lld",&n,&m);
for(int i=1;i<=n;++i)
{
scanf("%lld",&a[i]);
maxn=max(maxn,a[i]);
}
for(int i=1;i<=n;++i)
{
//root[i]=root[i-1];
insert(root[i],1,maxn,a[i],1,root[i-1]);
}
for(int i=1;i<=m;++i)
{
int orz,l,r,x;
scanf("%lld",&orz);
if(orz==1)
{
scanf("%lld%lld%lld",&l,&r,&x);
if(x>maxn){printf("0\n");continue;}
printf("%lld\n",query(root[r],1,maxn,x)-query(root[l-1],1,maxn,x));
}
else
{
scanf("%lld",&l);
insert(root[l],1,maxn,a[l],-1,root[l-1]);
insert(root[l],1,maxn,a[l+1],1,root[l-1]);
swap(a[l],a[l+1]);
}
}
}
【模拟8.03】数颜色(vector//主席树)的更多相关文章
- 2018.07.07 洛谷 P3939 数颜色(主席树)
P3939 数颜色 题目背景 大样例下发链接:http://pan.baidu.com/s/1c0LbQ2 密码:jigg 题目描述 小 C 的兔子不是雪白的,而是五彩缤纷的.每只兔子都有一种颜色,不 ...
- CDOJ 1104 求两个数列的子列的交集 查询区间小于A的数有多少个 主席树
求两个数列的子列的交集 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/problem/show/1104 ...
- SPOJ DQUERY 求区间内不同数的个数 主席树
这题跟HDU3333差不多吧. 离线的做法很简单,不再说了 以前做过. 主席树的做法就比较暴力了.. 什么是主席树呢.. 其实是某种称号. 在该题中的体现是可持久化的线段树. 对于一个数 如果以前没出 ...
- [四校联考P3] 区间颜色众数 (主席树)
主席树 Description 给定一个长度为 N 颜色序列A,有M个询问:每次询问一个区间里是否有一种颜色的数量超过了区间的一半,并指出是哪种颜色. Input 输入文件第一行有两个整数:N和C 输 ...
- BZOJ5011 JXOI2017颜色(主席树)
相当于求满足在子段中出现的颜色只在该子段中出现的非空子段数量.这也就相当于其中出现的颜色最左出现的位置在左端点右侧,最右出现的位置在右端点左侧.那么若固定某个端点,仅考虑对该端点的限制,会有一段合法区 ...
- luogu P3939 数颜色 |vector
题目描述 小 C 的兔子不是雪白的,而是五彩缤纷的.每只兔子都有一种颜色,不同的兔子可能有 相同的颜色.小 C 把她标号从 1 到 n 的 n 只兔子排成长长的一排,来给他们喂胡萝卜吃. 排列完成后, ...
- SPOJ DQUERY D-query(主席树 区间不同数个数)
题意:问你区间有几个不同的数 思路:主席树nb.我们知道主席树每一个root都存着一棵权值线段树,现在我们在每个root中存位置,也就是01表示这个位置存不存在.然后我们用一个fa[a[i]]表示a[ ...
- 【BZOJ3439】 Kpm的MC密码 (TRIE+主席树)
3439: Kpm的MC密码 Description 背景 想Kpm当年为了防止别人随便进入他的MC,给他的PC设了各种奇怪的密码和验证问题(不要问我他是怎么设的...),于是乎,他现在理所当然地忘记 ...
- hdu_2665_Kth number(主席树)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=2665 题意:给你一个区间,让你找这个区间第K大的数 题解:主席树模版题,也可以用划分树 #includ ...
随机推荐
- 【实用小技巧】spring与springmvc自动扫描包重复的问题解决
spring对应配置文件为: <!-- 配置自动扫描的包,此时要排除Controller --> <context:component-scan base-package=" ...
- js 实现 bind 的这五层,你在第几层?
最近在帮朋友复习 JS 相关的基础知识,遇到不会的问题,她就会来问我. 这不是很简单?三下五除二,分分钟解决. function bind(fn, obj, ...arr) { return fn.a ...
- 第一周JVM核心技术-工具与GC策略
一. JDK工具 1.1 内置命令行工具 工具 简介 jps/jinfo 查看java进程 jstat 查看JVM内部GC信息 jmap 查看JVM堆或类占用空间信息 jstack 查看线程信息 jc ...
- 3D饼/环Echarts图的实现
首先确保在项目中引入了echarts和echarts-gl"echarts": "^4.9.0","echarts-gl": "^ ...
- bashshell删除列
删除所有空白列cat yum.log | awk '{$1=$2=$3=$4=null;print $0}'>>yum.log7删除文件中的所有空格sed -i s/[[:space:]] ...
- 使用chrony安装chrony
yum install chrony -y 使用chrony安装chrony 使用root用户登录~]# yum install chrony 默认的chrony进程位置/usr/sbin/c ...
- 如何在我的EC2实例状态更改时获取自定义电子邮件通知
具体详情,请参见: https://amazonaws-china.com/cn/premiumsupport/knowledge-center/ec2-email-instance-state-ch ...
- k8s用 ConfigMap 管理配置(13)
一.ConfigMap介绍 Secret 可以为 Pod 提供密码.Token.私钥等敏感数据:对于一些非敏感数据,比如应用的配置信息,则可以用 ConfigMap ConfigMap 的创建和使用方 ...
- 【长期更新】Ubuntu常用命令备忘录
Error Could not get lock /var/lib/dpkg/lock 出现这个问题可能是有另外一个程序正在运行,导致资源被锁不可用.而导致资源被锁的原因可能是上次运行安装或更新时没 ...
- CENTOS 7 下配置默认网关
1. ip route 显示和设定路由 1.1 显示路由表 [root@linux-node1 ~]# ip route show default via 192.168.56.2 dev eth0 ...