noip模拟赛 数颜色


分析:高级数据结构学傻了.....一眼看上去觉得是莫队,发现带修改,于是分块,由于写的常数很大,只有70分.
正解很简单,记录下颜色为c的每只兔子的位置,每次二分找这个区间有多少只这种颜色的兔子就可以了,交换操作就交换位置,颜色.可能会存不下,所以用vector.
70分分块:
#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm> using namespace std; int n, m, a[][], b[], block, l[], r[], pos[], cnt, vis[];
bool flag = true; void update(int cur)
{
int t = b[cur], t2 = b[cur + ];
swap(b[cur], b[cur + ]);
int p1 = pos[cur], p2 = pos[cur + ];
a[p1][t]--;
a[p2][t]++;
a[p1][t2]++;
a[p2][t2]--;
} int query(int ll, int rr, int c)
{
int L = pos[ll], R = pos[rr], res = ;
if (L >= R - )
{
for (int i = ll; i <= rr; i++)
if (b[i] == c)
res++;
return res;
}
for (int i = L + ; i <= R - ; i++)
res += a[i][c];
for (int i = ll; i <= r[L]; i++)
if (b[i] == c)
res++;
for (int i = l[R]; i <= rr; i++)
if (b[i] == c)
res++;
return res;
} int main()
{
scanf("%d%d", &n, &m);
block = sqrt(n);
for (int i = ; i <= n; i++)
pos[i] = (i - ) / block + ;
cnt = (n - ) / block + ;
for (int i = ; i <= cnt; i++)
l[i] = r[i - ] + , r[i] = min(block * i, n);
for (int i = ; i <= n; i++)
{
int t;
scanf("%d", &t);
a[pos[i]][t]++;
b[i] = t;
}
while (m--)
{
int op, l, r, c;
scanf("%d", &op);
if (op == )
{
scanf("%d%d%d", &l, &r, &c);
printf("%d\n", query(l, r, c));
}
else
{
scanf("%d", &c);
update(c);
}
} return ;
}
正解:
#include <cmath>
#include <vector>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm> using namespace std; const int maxn = ; int n, m, a[maxn];
vector <int>b[maxn]; int main()
{
scanf("%d%d", &n, &m);
for (int i = ; i <= n; i++)
{
scanf("%d", &a[i]);
b[a[i]].push_back(i);
}
for (int i = ; i <= n; i++)
sort(b[i].begin(), b[i].end());
while (m--)
{
int op, l, r, c;
scanf("%d", &op);
if (op == )
{
scanf("%d%d%d", &l, &r, &c);
printf("%d\n", (int)(upper_bound(b[c].begin(), b[c].end(), r) - lower_bound(b[c].begin(), b[c].end(), l)));
}
else
{
scanf("%d", &c);
if (a[c] != a[c + ])
{
(*lower_bound(b[a[c]].begin(), b[a[c]].end(), c))++;
(*lower_bound(b[a[c + ]].begin(), b[a[c + ]].end(), c + ))--;
swap(a[c], a[c + ]);
}
}
} return ;
}
noip模拟赛 数颜色的更多相关文章
- NOIP 模拟 9 数颜色
题解 一道裸的数据结构题 正解是排序 \(+\) 二分,但是这怎么能有动态开点线段树好写呢? 于是我就打了暴力,骗了五十分. 对于每种颜色,我们在下标上开一颗线段树,对于交换若颜色相同则跳过,否则直接 ...
- CH Round #58 - OrzCC杯noip模拟赛day2
A:颜色问题 题目:http://ch.ezoj.tk/contest/CH%20Round%20%2358%20-%20OrzCC杯noip模拟赛day2/颜色问题 题解:算一下每个仆人到它的目的地 ...
- NOI.AC NOIP模拟赛 第六场 游记
NOI.AC NOIP模拟赛 第六场 游记 queen 题目大意: 在一个\(n\times n(n\le10^5)\)的棋盘上,放有\(m(m\le10^5)\)个皇后,其中每一个皇后都可以向上.下 ...
- NOI.AC NOIP模拟赛 第三场 补记
NOI.AC NOIP模拟赛 第三场 补记 列队 题目大意: 给定一个\(n\times m(n,m\le1000)\)的矩阵,每个格子上有一个数\(w_{i,j}\).保证\(w_{i,j}\)互不 ...
- 【HHHOJ】NOIP模拟赛 玖 解题报告
点此进入比赛 得分: \(100+20+100=220\)(还不错) 排名: \(Rank\ 16\) \(Rating\):\(+20\) \(T1\):[HHHOJ263]「NOIP模拟赛 玖」三 ...
- 2014-10-31 NOIP模拟赛
10.30 NOIp 模拟赛 时间 空间 测试点 评测方式 挖掘机(dig.*) 1s 256M 10 传统 黑红树(brtree.*) 2s 256M 10 传统 藏宝图(treas. ...
- NOIP模拟赛20161022
NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...
- NOIP模拟赛 by hzwer
2015年10月04日NOIP模拟赛 by hzwer (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...
- 大家AK杯 灰天飞雁NOIP模拟赛题解/数据/标程
数据 http://files.cnblogs.com/htfy/data.zip 简要题解 桌球碰撞 纯模拟,注意一开始就在袋口和v=0的情况.v和坐标可以是小数.为保险起见最好用extended/ ...
随机推荐
- time模块,datetime模块
time模块 time模块是包含各方面对时间操作的函数. 尽管这些常常有效但不是所有方法在任意平台中有效. 时间相关的操作,时间有三种表示方式: 时间戳 1970年1月1日 ...
- MFC显示文本文档 分类: MFC 2014-12-30 10:03 457人阅读 评论(1) 收藏
新建基于对话框的MFC应用程序.资源视图的对话框上添加编辑框(Edit Control)和按钮(Button), 将编辑框属性:Mutiline.Auto HScroll.Auto VScroll设为 ...
- jQuery Ajax使用实例
<script src="http://cdn.bootcss.com/jquery/1.11.2/jquery.js"></script> <scr ...
- 外文翻译 《How we decide》赛场上的四分卫 第二节
本书导言翻译 本章第一节 "决定是如何做出来的",关于意识最神秘的问题之一.尽管我们时刻做着决定,但是我们没有感觉到大脑内部的一系列有关进程.NFL球探挑选候选球员的评分表中,决策 ...
- jquery 实现 点击把数据移动右侧 点击再次移回到左侧
2018年第一发 希望新的一年和大家一下学习更多知识 JS://把数据左边挪到了右边,再从右边移动回来function moveOption(e1, e2){ $("#" ...
- 免费大数据搜索引擎 xunsearch 实践
以前在IBM做后端开发时,也接触过关于缓存技术,当时给了n多文档来学习,后面由于其他紧急的项目,一直没有着手去仔细研究这个技术,即时后来做Commerce的时候,后台用了n多缓存技术,需要build ...
- android中使用图文并茂的按钮
代码: <LinearLayout android:orientation="horizontal" android:layout_width="match_par ...
- iOS programming UITabBarController
iOS programming UITabBarController 1.1 View controllers become more interesting when the user's acti ...
- 解决max解析记录与cname不能共存的问题
问题描述: 在腾讯上做了域名邮箱解析,需要将max记录绑定到主机记录为@(即空)的记录下. 而在做域名解析的时候,为了方便,需要将不带3w的域名也要解析到主机记录为@(即空)的记录下. 因此,解析报错 ...
- 护卫神·云查杀系统V4.0-安全检测部分
感谢使用护卫神·云查杀系统,该软件专门查杀网页木马,完全免费,欢迎大家使用. 护卫神·云查杀系统 下载地址:http://down.huweishen.com/free/HwsKill.zip ...