分析:高级数据结构学傻了.....一眼看上去觉得是莫队,发现带修改,于是分块,由于写的常数很大,只有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模拟赛 数颜色的更多相关文章

  1. NOIP 模拟 9 数颜色

    题解 一道裸的数据结构题 正解是排序 \(+\) 二分,但是这怎么能有动态开点线段树好写呢? 于是我就打了暴力,骗了五十分. 对于每种颜色,我们在下标上开一颗线段树,对于交换若颜色相同则跳过,否则直接 ...

  2. CH Round #58 - OrzCC杯noip模拟赛day2

    A:颜色问题 题目:http://ch.ezoj.tk/contest/CH%20Round%20%2358%20-%20OrzCC杯noip模拟赛day2/颜色问题 题解:算一下每个仆人到它的目的地 ...

  3. NOI.AC NOIP模拟赛 第六场 游记

    NOI.AC NOIP模拟赛 第六场 游记 queen 题目大意: 在一个\(n\times n(n\le10^5)\)的棋盘上,放有\(m(m\le10^5)\)个皇后,其中每一个皇后都可以向上.下 ...

  4. NOI.AC NOIP模拟赛 第三场 补记

    NOI.AC NOIP模拟赛 第三场 补记 列队 题目大意: 给定一个\(n\times m(n,m\le1000)\)的矩阵,每个格子上有一个数\(w_{i,j}\).保证\(w_{i,j}\)互不 ...

  5. 【HHHOJ】NOIP模拟赛 玖 解题报告

    点此进入比赛 得分: \(100+20+100=220\)(还不错) 排名: \(Rank\ 16\) \(Rating\):\(+20\) \(T1\):[HHHOJ263]「NOIP模拟赛 玖」三 ...

  6. 2014-10-31 NOIP模拟赛

        10.30 NOIp  模拟赛   时间 空间 测试点 评测方式 挖掘机(dig.*) 1s 256M 10 传统 黑红树(brtree.*) 2s 256M 10 传统 藏宝图(treas. ...

  7. NOIP模拟赛20161022

    NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...

  8. NOIP模拟赛 by hzwer

    2015年10月04日NOIP模拟赛 by hzwer    (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...

  9. 大家AK杯 灰天飞雁NOIP模拟赛题解/数据/标程

    数据 http://files.cnblogs.com/htfy/data.zip 简要题解 桌球碰撞 纯模拟,注意一开始就在袋口和v=0的情况.v和坐标可以是小数.为保险起见最好用extended/ ...

随机推荐

  1. Service官方教程(5)后台服务发送通知、把服务变前台服务。

    1.Sending Notifications to the User (发送通知) Once running, a service can notify the user of events usi ...

  2. Plugging an Unplugged Pluggable Database issue 3

    Multitenant Unplug/Plug Best Practices (文档 ID 1935365.1) 1.source 从0419 升级到1019 ,但是datapatch 没有回退041 ...

  3. 用C#操作word替换字符,用spire

    这两天想写个小程序,是用C#操作word文档的.许多人都对微软本身的解决方案COM组件十分不看好,比如需要本机安装office等等,总之吐槽很多,直接放弃. 搜到一个国产的npoi库,据说操作简单功能 ...

  4. 掌握Spark机器学习库-07-回归分析概述

    1)回归与分类算法的区别 回归的预测结果是连续的,分类的预测结果是离散的. 2)spark实现的回归算法有: 3)通过相关系数衡量线性关系的程度

  5. q-oo-p , a piggy domain name. Very cute. boyan.zheng at foxmail.com

    Contact me.

  6. 核武器代理CC工具V3.42最新版本!

    软件说明 !!!有新版本更新,请移步到更新地址:https://www.cnblogs.com/cnhacker/p/10878688.html ########################### ...

  7. 大写URL转小写

    添加LowercaseRoutesMVC.dll引用.通过“管理—NuGet程序包”搜索LowercaseRoutesMVC,然后点击安装.安装成功后会自动引用LowercaseRoutesMVC.d ...

  8. Which dispatch method would be used in Swift?

    In this example: protocol MyProtocol { func testFuncA() } extension MyProtocol { func testFuncA() { ...

  9. docker使用registry搭建本地私有仓库

    参考链接来自:http://blog.csdn.net/wangtaoking1/article/details/44180901/ 和Mavan的管理一样,Dockers不仅提供了一个中央仓库,同时 ...

  10. ubuntu 普通用户运行virt-manager时libvirt权限设置

    error: Failed to connect socket to '/var/run/libvirt/libvirt-sock': Permission deniederror: failed t ...