博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[BZOJ2120]:数颜色(分块?)
阅读量:7121 次
发布时间:2019-06-28

本文共 1472 字,大约阅读时间需要 4 分钟。


我感觉这种题没必要扯淡题目大意了,没啥用。

暴力过掉,擦了个边。

主要是讲一下这道题我用到的卡常。

首先,0,1标记我用的位运算,位运算符跑的要比正常的+,-,×,÷,true,false快。

其次,我使用了

while(isspace(op=fgetc(stdin)));ungetc(op,stdin);

来吃字符。

个人感觉比while快。

快读当然不可少,位运算快读更快。

inline int read(){    short x=0;    char ch=getchar();    while(ch<'0'||ch>'9')        ch=getchar();    while(ch>='0'&&ch<='9'){        x=(x<<1)+(x<<3)+(ch^48);        ch=getchar();    }    return x;}

这些东西足以卡过洛谷的超水数据,不过还是建议大家打一下正解。

另外,今天从同学那里学到了这个:

const int L=1<<20|1;char buffer[L],*S,*T;#define getchar() ((S==T&&(T=(S=buffer)+fread(buffer,1,L,stdin),S==T))?EOF:*S++)

 好像是能快不少,不过需要慎用,这个我也用不熟练,在此就不做过多说明,出现问题概不负责。


代码时刻:

#include
#include
#include
int a[10001],x,y,ans;int wzc[1000001];char op;inline int read(){ int x=0; char ch=getchar(); while(ch<'0'||ch>'9') ch=getchar(); while(ch>='0'&&ch<='9'){ x=(x<<1)+(x<<3)+(ch^48); ch=getchar(); } return x;}int main(){ x=read(); for(register int i=0;i<=x;++i)a[i]=read(); while(a[0]--) { while(isspace(op=fgetc(stdin))); ungetc(op,stdin); op=getchar(); x=read(); y=read(); if(op=='Q') { ans=0; memset(wzc,0,sizeof(wzc)); for(register int i=x;i<=y;++i) ans+=wzc[a[i]]^1,wzc[a[i]]|=1; printf("%d\n",ans); } else a[x]=y; } return 0;}

当然是卡常的代码,哈哈哈


rp++

转载于:https://www.cnblogs.com/wzc521/p/11018827.html

你可能感兴趣的文章
Silverlight C# 游戏开发:自定义鼠标(一)
查看>>
Python[8] :paramiko模块多进程批量管理主机
查看>>
异步加载js文件并执行js方法:实现异步处理网页的复杂效果
查看>>
Windows Home Server 常见问题
查看>>
CentOS 6.2目录服务之LDAP(一)
查看>>
配置Action
查看>>
c语言表白程序代码
查看>>
Exchange 2003升级至Exchange 2007
查看>>
Linux也使用多线程下载
查看>>
用脚本管理服务器日志
查看>>
JBoss企业级应用服务平台群集指南(一)
查看>>
使用高速通道加速iOS版本审核
查看>>
学习笔记:App-V测试错误代码4505CD-1690150A-20000194
查看>>
分布式实时分析数据库citus数据插入性能优化
查看>>
比较好玩的动态添加网页元素
查看>>
关于bacula网络备份软件的安装以及配置1
查看>>
对adapter的封装优化
查看>>
efs解密-Advanced EFS Data Recovery2.1-含注册KEY
查看>>
java运行环境(JRE)
查看>>
安装System Center 2012 R2 数据库
查看>>