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, ...
随机推荐
- HTML 页面间传值(包含中文)
A页面——>B页面 A页面 $('.edit-bottom').click(function () { var word1=$('#word').val();//需要传到B页面的值 var ur ...
- mysql8.0 安装版没有my.ini
这时候,打开 benchmark,看一下实际路径就好了
- hdoj 1325 Is It A Tree? 【并查集】
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/shengweisong/article/details/34099151 做了一上午,最终ac了 w ...
- Spring Boot邮件功能
1.应用场景 邮件功能的应用场景可谓十分广泛,诸如注册用户.密码找回,消息通知.以及一些程序异常通知等都需要使用到该功能. 正是由于邮件功能的使用广泛,因此springboot也加在它的组件中添加了邮 ...
- 洛谷P2468 [SDOI2010]粟粟的书架
来了来了,随便拽一道题写题解[大雾] 最近发现自己基础奇差于是开始复习之前学过的东西,正好主席树我几乎完全没学会,然后打开洛谷试炼场… 发现了这么一道二合一的题. 这道题其实分成两个部分,前50%是一 ...
- 关于Layui 响应式移动端轮播图的问题
用layui做轮播图,在手机上宽度异常, 可通过以下方法解决, 不喜欢layui的同学可以选择Swiper // 轮播图 layui.use('carousel', function () { var ...
- 文件下载工具类 DownLoadUtil 实战
package com.cloud.mina.util; import java.io.File; import java.io.FileInputStream; import java.io.IOE ...
- 用Direct2D和DWM来做简单的动画效果
原文:用Direct2D和DWM来做简单的动画效果 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/sunnyloves/article/detail ...
- 洛谷 P1073 最优贸易 最短路+SPFA算法
目录 题面 题目链接 题目描述 输入输出格式 输入格式 输出格式 输入输出样例 输入样例 输出样例 说明 思路 AC代码 题面 题目链接 P1073 最优贸易 题目描述 C国有 $ n $ 个大城市和 ...
- 【JZOJ4771】【NOIP2016提高A组模拟9.9】爬山
题目描述 国家一级爬山运动员h10今天获得了一张有着密密麻麻标记的地图,在好奇心的驱使下,他又踏上了去爬山的路. 对于爬山,h10有一个原则,那就是不走回头路,于是他把地图上的所有边都标记成了有向边. ...