博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【分块】hdu5057 Argestes and Sequence
阅读量:6874 次
发布时间:2019-06-26

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

分块,v[i][j][k]表示第i块内第j位是k的元素数。非常好写。注意初始化

要注意题意,①第i位是从右往左算的。

②若x没有第i位,则用前导零补齐10位。比如103---->0000000103。

1 #include
2 #include
3 #include
4 using namespace std; 5 const int MOD[]={
1,10,100,1000,10000,100000,1000000,10000000,100000000,1000000000}; 6 int T,n,m,ql,qr,x,y,a[100001],l[400],r[400],v[330][11][10],sz,num[100001],sum; 7 char op[1]; 8 inline int Bit(const int &x,const int &p) {
return (x/MOD[p-1])%10;} 9 void makeblock()10 {11 memset(v,0,sizeof(v));12 sz=sqrt(n); sum=0;13 for(sum=1;sum*sz
=num[qr]) {
for(int i=ql;i<=qr;i++) if(Bit(a[i],x)==y) ans++;}38 else39 {40 for(int i=ql;i<=r[num[ql]];i++) if(Bit(a[i],x)==y) ans++;41 for(int i=l[num[qr]];i<=qr;i++) if(Bit(a[i],x)==y) ans++;42 for(int i=num[ql]+1;i
0;T--)59 {60 scanf("%d%d",&n,&m);61 for(int i=1;i<=n;i++) scanf("%d",&a[i]);62 makeblock();63 for(int i=1;i<=m;i++)64 {65 scanf("%s",op);66 if(op[0]=='Q') {scanf("%d%d%d%d",&ql,&qr,&x,&y); query();}67 else {scanf("%d%d",&x,&y); update();}68 }69 }70 return 0;71 }

 

转载于:https://www.cnblogs.com/autsky-jadek/p/4026715.html

你可能感兴趣的文章
【转】Sublime Text 2 - 简单介绍
查看>>
mongoose 小问题
查看>>
福大软工 · 第十一次作业 - Alpha 事后诸葛亮(团队)
查看>>
python爬虫笔记3
查看>>
Linux环境测试机器端口连通性
查看>>
关于Linux连接工具mobaxterm显示中文乱码问题
查看>>
iphone-common-codes-ccteam源代码 CCUILabel.h
查看>>
码农们:你属于哪一种极品程序员?
查看>>
【Daily】Javascript事件对象
查看>>
时间记录日志
查看>>
菜谱查询接口文档
查看>>
Mybatis——SQL语句构建器类
查看>>
LeetCode——Search a 2D Matrix II
查看>>
链表中环的入口结点
查看>>
什么是区块链?
查看>>
了解MIP(Mobile Instant Pages)
查看>>
SVN版本冲突解决详解 - snwrking的专栏 - 博客频道 - CSDN.NET
查看>>
Oralce安装、使用过程中出现的问题
查看>>
ny14 会场安排问题
查看>>
使用Java生成具有安全哈希的QR码
查看>>