HZOJ 数颜色
一眼看去树套树啊,我可能是数据结构学傻了……

是应该去学一下莫队进阶的东西了。
上面那个东西我没有打,所以这里没有代码,而且应该也不难理解吧。

这么多平衡树就算了,不过线段树还是挺好打的。
正解3:
主席树啊,其实并不需要再加一个树状数组,因为每次修改只影响两个,暴力修改就行了。
正解4:
分块(就是暴力但是跑的好快啊)。
下面是真正的正解:
将兔子以颜色为第一关键字,位置为第二关键字排序,通过二分就能找到一段区间内某种颜色兔子的数量。
至于修改,只需要找到两只兔子,将其位置互换即可,因为两只兔子是相邻的,所以并不会破坏有序性。
#include<algorithm>
#include<iostream>
#include<utility>
#include<cstdio>
#include<vector>
#define LL long long
#define int LL
#define MAXN 300010
using namespace std;
int n,m,b[MAXN];
const int INF=;
pair<int,int> a[MAXN];
inline int read();
signed main()
{
// freopen("in.txt","r",stdin); n=read(),m=read();
for(int i=;i<=n;i++)a[i].first=read(),a[i].second=i,b[i]=a[i].first;//a[i]=read();
sort(a+,a+n+);
int op,x,l,r,c;
for(int i=;i<=m;i++)
{
op=read();
if(op==)
{
l=read(),r=read(),c=read();
int len1=(upper_bound(a+,a+n+,make_pair(c,r))-a),len2=(lower_bound(a+,a+n+,make_pair(c,l))-a);
printf("%lld\n",len1-len2);
}
else
{
x=read();
if(b[x]==b[x+])continue;
int tem1=lower_bound(a+,a+n+,make_pair(b[x],x))-a,tem2=lower_bound(a+,a+n+,make_pair(b[x+],x+))-a;
swap(a[tem1].second,a[tem2].second);swap(b[x],b[x+]);
}
}
}
inline int read()
{
int s=,f=;char a=getchar();
while(a<''||a>''){if(a=='-')f=-;a=getchar();}
while(a>=''&&a<=''){s=s*+a-'';a=getchar();}
return s*f;
}
HZOJ 数颜色的更多相关文章
- BZOJ 2120: 数颜色
2120: 数颜色 Time Limit: 6 Sec Memory Limit: 259 MBSubmit: 3623 Solved: 1396[Submit][Status][Discuss] ...
- 【BZOJ-2453&2120】维护队列&数颜色 分块 + 带修莫队算法
2453: 维护队列 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 653 Solved: 283[Submit][Status][Discuss] ...
- BZOJ 2120 数颜色(带修改的莫队)
2120: 数颜色 Time Limit: 6 Sec Memory Limit: 259 MB Submit: 3478 Solved: 1342 [Submit][Status][Discus ...
- BZOJ 2120: 数颜色 分块
2120: 数颜色 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/problem.php? ...
- Bzoj 2120: 数颜色 && 2453: 维护队列 莫队,分块,bitset
2120: 数颜色 Time Limit: 6 Sec Memory Limit: 259 MBSubmit: 2645 Solved: 1039[Submit][Status][Discuss] ...
- bzoj2120 / P1903 [国家集训队]数颜色 / 维护队列(带修改莫队)
P1903 [国家集训队]数颜色 / 维护队列 带修改的莫队 在原有指针$(l,r)$上又添加了时间指针$t$ 贴一段dalao的解释 带修改的莫队,和原版莫队相比,多了一个时间轴 原版莫队是将区间( ...
- BZOJ 2120 数颜色 (带修莫队)
2120: 数颜色 Time Limit: 6 Sec Memory Limit: 259 MBSubmit: 6367 Solved: 2537[Submit][Status][Discuss] ...
- Luogu 1903 数颜色 | 分块
Luogu 1903 数颜色 | 分块 莫队不会啊-- 这道题直接分块也能卡过! 这道题的做法很有趣:对于每个位置i,记录它的颜色a[i]上一次出现的位置,记为pre[i]. 这样在查询一个区间[l, ...
- P3939 数颜色
目录 题目 思路1(待修莫队) 思路2(vector+二分) 代码1 代码2 题目 P3939 数颜色 思路1(待修莫队) 哇,这不是莫队模板题吗 3e5,TLE45分 不行 我有信仰啊 pow(n, ...
随机推荐
- nginx在win系统下的安装配置与tomcat集成springmvc框架
先来一个常用命令 验证配置是否正确: nginx -t 查看Nginx的版本号:nginx -V 启动Nginx:start nginx 快速停止或关闭Nginx:nginx -s stop 正常停止 ...
- MySQL数据库起步 关于数据库的基本操作(更新中...)
mysql的基本操作 连接指定的服务器(需要服务器开启3306端口) mysql -h ip地址 -P 端口号 -u 账号 -p 密码 删除游客模式 mysql -h ip地址 -P 端口号 -u 账 ...
- 外观模式(Facade)(门面模式、子系统容易使用)
外观(Facade)模式的定义:是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式.该模式对外有一个统一接口,外部应用程序不用关心内部子系统的具体的细节,这样会大大降低 ...
- java学习补全 1
CLASSPATH java执行命令时利用此路径加在需要的.class文件 字符串常量就是String 类的匿名对象 String类在直接复制的情况下只会保留一块堆内存 a="hhh&quo ...
- Android中使用ormlite实现持久化--HelloOrmLite
Android中内置了sqlite,但是常用的开发语言java是面向对象的,而数据库是关系型的,二者之间的转化每次都很麻烦(主要是我对sql语言不熟悉).而Java Web开发中有很多orm框架,但是 ...
- NFS客户端挂载目录后无写入权限的解决方案
转载至:https://blog.csdn.net/younger_china/article/details/52089337 在客户机通过 mount -o rw -t nfs 192.168.1 ...
- Docker.[3].镜像操作.
Docker.[3].镜像操作. 熟悉基础指令: 查看本地镜像 docker images 查看本地镜像 docker image list (和上面显示的结果一样.) 删除本地镜像 docker r ...
- uni-app官方教程学习手记
本人微信公众号:前端修炼之路,欢迎关注 背景介绍 大概在今年的十月份左右,我了解到Dcloud推出了uni-app.当时下载了一个Hbuilder X,下载了官方提供的hello示例教程.经过一番努力 ...
- C++ 之手写memcpy
#include<iostream>#include<cstdio>using namespace std; void* mymemcpy(void* dst, const v ...
- java 2类与对象[学堂在线]
java的面向对象方法和特征(略) 累的声明格式 语法:先定义一个引用变量名 穿件对象 new aclock=new CLock() 没有ststaic 就是实例变量 类变量static 类变量 方法 ...