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, ...
随机推荐
- 【arc077f】AtCoder Regular Contest 077 F - SS
题意 给你一个形如"SS"的串S,以及一个函数\(f(x)\),\(x\)是一个形如"SS"的字符串,\(f(x)\)也是一个形如"SS"的 ...
- 关于python的字典操作
字典和列表的区别: 列表是有序的 字典是无序的 字典使用{}定义 字典使用键值对存储数据,键值对之间使用 “ ,”分隔 键 key 是索引 值 value 是数据 键和值之间使用 “ :”分隔 ...
- Python之路,Day2 - Python基础(转载Alex)
Day2-转自金角大王 本节内容 列表.元组操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码 1. 列表.元组操作 列表是我们最以后最常用的数据类型之一,通过列表可以对数据实现最方便的存 ...
- Django REST Framework之认证组件
什么是认证 认证即需要知道是谁在访问服务器,需要有一个合法身份.认证的方式可以有很多种,例如session+cookie.token等,这里以token为例.如果请求中没有token,我们认为这是未登 ...
- python应用文件读取写登录注册
#!/usr/bin/python3# -*- coding: utf-8 -*-# Author: zhw#读取文件中的内容def open_file(filename ,file_type , * ...
- vue 使用 element ui动态添加表单
html部分 <div class="hello"> <el-form :model="dynamicValidateForm" ref=&q ...
- 你知道forEach和each的区别吗?
要知道forEach和each的区别,你必须明白一点:forEach是js中的方法(针对数组),而each是jquery中的方法(针对jquery对象,即$( ) ).知道这一点,接下来我分别给举 ...
- leetcode 235-290 easy
235. Lowest Common Ancestor of a Binary Search Tree 公共的祖先必定大于左点小于右点,否则不断递归到合适. class Solution { publ ...
- leetcode 198-234 easy
198. House Robber 相邻不能打劫,取利益最大化. 思想:当前值和前一个和的总数 与 前一个和 做大小比较,取最大值,重复该步骤. class Solution { publ ...
- Hdu 4920矩阵乘法(内存访问的讲究)
题目链接 Matrix multiplication Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 K ( ...