正解:二分

解题报告:

传送门!

话说其实我开始看到这题想到的是分块,,,

但是显然不用这么复杂,,,因为仔细看下这题,会发现每次只改变相邻的兔子的位置

所以开个vector(或者开个数组也成QwQ(数组就能用lower_bound

按顺序存下来每个颜色的兔子的位置,每次修改只用O(1)地改就好了

然后复杂度是O(nlogn),和莫队复杂度一样却简单很多

over

(对了,这题我本来想的是分块嘛,我就搜了下可不可以用分块,只看到了一篇题解,说分块会被时空双卡,但是可以优化,我还没有仔细看先贴个链接QAQ

然后放下二分代码QAQ

#include<bits/stdc++.h>
using namespace std;
#define ll int
#define rp(i,x,y) for(register ll i=x;i<=y;++i) const ll N=+;
ll n,m,a[N];
vector<ll>gg[N]; inline ll read()
{
register char ch=getchar();register ll x=;register bool y=;
while(ch!='-' && (ch>'' || ch<''))ch=getchar();
if(ch=='-')ch=getchar(),y=;
while(ch>='' && ch<='')x=(x<<)+(x<<)+(ch^''),ch=getchar();
return y?x:-x;
}
inline void wk1(){ll l=read(),r=read(),c=read();if(gg[c].size()==){printf("0\n");return;}printf("%d\n",upper_bound(gg[c].begin(),gg[c].end(),r)-lower_bound(gg[c].begin(),gg[c].end(),l));}
inline void wk2(){ll x=read();if(a[x]==a[x+])return;gg[a[x]][lower_bound(gg[a[x]].begin(),gg[a[x]].end(),x)-gg[a[x]].begin()]=x+;gg[a[x+]][lower_bound(gg[a[x+]].begin(),gg[a[x+]].end(),x+)-gg[a[x+]].begin()]=x;swap(a[x],a[x+]);} int main()
{
n=read();m=read();rp(i,,n)a[i]=read(),gg[a[i]].push_back(i);
while(m--){ll op=read();op==?wk1():wk2();}
return ;
}

压行选手绝不轻易认输!(hhh其实我也jio得这次的代码压得丑了点儿,,,然而不压行我就,浑身难受QAQ

#include<bits/stdc++.h>
using namespace std;
#define ll int
#define rp(i,x,y) for(register ll i=x;i<=y;++i) const ll N=;
ll n,m,a[N];
vector<ll>gg[N]; inline ll read()
{
register char ch=getchar();register ll x=;register bool y=;
while(ch!='-' && (ch>'' || ch<''))ch=getchar();
if(ch=='-')ch=getchar(),y=;
while(ch>='' && ch<='')x=(x<<)+(x<<)+(ch^''),ch=getchar();
return y?x:-x;
}
inline ll lb(ll y,ll x)
{
ll l=,r=gg[x].size()-;
while(l<=r){ll mid=(l+r)>>;if(gg[x][mid]>=y)r=mid-;if(gg[x][mid]<y)l=mid+;}
return l;
}
inline ll ub(ll y,ll x)
{
ll l=,r=gg[x].size()-;
while(l<=r){ll mid=(l+r)>>;if(gg[x][mid]>y)r=mid-;if(gg[x][mid]<=y)l=mid+;}
return l;
}
inline void wk1(){ll l=read(),r=read(),c=read();if(gg[c].size()==){printf("0\n");return;}printf("%d\n",ub(r,c)-lb(l,c));}
inline void wk2(){ll x=read();if(a[x]==a[x+])return;gg[a[x]][lb(x,a[x])]=x+;gg[a[x+]][lb(x+,a[x+])]=x;swap(a[x],a[x+]);} int main()
{
n=read();m=read();rp(i,,n)a[i]=read(),gg[a[i]].push_back(i);
while(m--){ll op=read();op==?wk1():wk2();}
return ;
}

放下手写二分写挂了的代码,,,我找不出错,,,,就很难过TT

洛谷P3939 数颜色 二分查找的更多相关文章

  1. 洛谷P3939 数颜色(二分 vector)

    题意 题目链接 Sol 直接拿vector维护每种颜色的出现位置,然后二分一下. #include<bits/stdc++.h> using namespace std; const in ...

  2. 洛谷——P3939 数颜色(暴力vecotr+二分)

    P3939 数颜色 $vecotr$里二分就是好用,全是$STL$ 颜色数目比较少,可以对每一种颜色弄一个$vector$记录一下,查找$l,r$内颜色数为$x$的兔子数,直接在$G[x]$这个$ve ...

  3. 2018.07.07 洛谷 P3939 数颜色(主席树)

    P3939 数颜色 题目背景 大样例下发链接:http://pan.baidu.com/s/1c0LbQ2 密码:jigg 题目描述 小 C 的兔子不是雪白的,而是五彩缤纷的.每只兔子都有一种颜色,不 ...

  4. [洛谷P3939]:数颜色(二分)

    题目传送门 题目描述 小$C$的兔子不是雪白的,而是五彩缤纷的.每只兔子都有一种颜色,不同的兔子可能有相同的颜色.小$C$把她标号从$1$到$n$的$n$只兔子排成长长的一排,来给他们喂胡萝卜吃.排列 ...

  5. [洛谷P3939]数颜色

    题目大意:有n个物品,每个物品有一个颜色.现在有两种操作:1.查询l-r内有多少颜色为c的物品并输出.2.将第x个物品和第x+1个交换.现在让你实现这些操作. 解题思路:首先一共有300000种颜色, ...

  6. [luogu]P3939 数颜色[二分]

    [luogu]P3939 数颜色 题目描述 小 C 的兔子不是雪白的,而是五彩缤纷的.每只兔子都有一种颜色,不同的兔子可能有 相同的颜色.小 C 把她标号从 1 到 n 的 n 只兔子排成长长的一排, ...

  7. Bzoj2120/洛谷P1903 数颜色(莫队)

    题面 Bzoj 洛谷 题解 考虑对操作离线后分块处理询问操作(莫队算法),将询问操作按照编号分块后左端点第一关键字,右端点第二关键字排序(分块大小为\(n^{\frac 23}\)),对于每一个询问操 ...

  8. [bzoj2120] [洛谷P1903] 数颜色

    Description 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会像你发布如下指令: 1. Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜 ...

  9. 洛谷P1903 数颜色 [国家集训队] 莫队

    正解:带修莫队 解题报告: 可以理解为引入时间参数,然后就是有了仨参数,关于这个修改同样的是,如果时间是相同的,不用搞,如果时间不相同做一下时光倒流/时光推移就成嘛 但是肯定既然这样的话,按照原来的s ...

随机推荐

  1. 怎么输入MathType不等号

    MathType是一款比较常用的数学公式编辑器,我们在使用这款软件的时候常常需要输入各种符号.有些新用户对这款软件不是很熟悉,对于一些符号不知道怎么输入,下面我们来给大家介绍介绍MathType不等号 ...

  2. ubuntu下vim配置(刷题和比赛两套)

    1. 平时刷题练习使用 "mswin.vim 插件提供windows下的编辑快捷键功能 source $VIMRUNTIME/mswin.vim behave mswin set nu se ...

  3. 浅谈无缓存I/O操作和标准I/O文件操作差别

    首先,先略微了解系统调用的概念:        系统调用,英文名system call,每一个操作系统都在内核里有一些内建的函数库,这些函数能够用来完毕一些系统系统调用把应用程序的请求传给内核,调用对 ...

  4. Python pymysql 模块

    pymysql 是 Python3 连接 MySQL 的一个模块,常见用法如下: [root@localhost ~]$ pip3 install pymysql # 安装 pymysql 模块 In ...

  5. 微信小程序实现文字跑马灯

    wxml: <view>1 显示完后再显示</view> <view class="example"> <view class=" ...

  6. XML 和 JSON 的使用场景

    我们都知道 JSON 和 XML 设计的初衷里都包含一点是对人类友好, 所以两者在这方面属于竞争关系. 而在 UI 描述上, 我觉得 XML 是比 JSON 要优异很多. 我们先来看一组简单的数据排版 ...

  7. Solr可视化简单的操作

    Solr可视化简单的操作 启动solr服务器;在浏览器输入Tomcat启动: http://192.168.191.142:8080/solr/#/ Ø  添加core,首先在存放home的文件下创建 ...

  8. django restframework 教程之Serialization(序列化)

    介绍 本教程将会通过创建一个简单的粘贴代码项目,突出显示WebAPI,过程中,会介绍组成REST框架的各种组件,让你全面了解如何配合使用. 环境设置 建议使用virtualenv建立新的虚拟环境,确保 ...

  9. poj_1475 BFS+BFS

    题目大意 推箱子游戏的基本玩法,求将箱子推到目的地的推动次数最少(并不是人移动总次数)的人移动路径. 题目分析 求最短路径的搜索问题,使用BFS.注意题目求的是 推动次数最少,因此将箱子移动作为状态, ...

  10. 开源的PaaS方案:在OpenStack上部署CloudFoundry (三)部署BOSH

    BOSH是CloudFoundry提供的用来安装部署和升级CloudFoundry的自动化工具,可是说是CloudFoundry的一部分.总体来说,BOSH是Client/Server结构, BOSH ...