博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[洛谷p2801]教主的魔法
阅读量:5283 次
发布时间:2019-06-14

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

题目链接:

题目分析:

很裸的分块题,最开始在原数组上排序WA掉了,还因此调了很久23333

(不过为什么这样一个全是bug的程序交上去会有90分啊 WOJ上甚至还能玄学A过)
大块打标记,小块暴力改,每次改了小块之后把小块所在的整个大块复制到另外一个数组里排序,询问时用二分找比C更大的第一个即可


代码:

#include
#define MAXN (1000000+5)using namespace std;inline int read(){ int cnt=0,f=1;char c; c=getchar(); while(!isdigit(c)){ if(c=='-')f=-f; c=getchar(); } while(isdigit(c)){ cnt=cnt*10+c-'0'; c=getchar(); } return cnt*f;}int n,a[MAXN],q,L[MAXN],R[MAXN],add[MAXN],pos[MAXN],b[MAXN];char opr;int find(int l,int r,int c){ int ll=l;int rr=r; int mid=(ll+rr)>>1; int u=pos[mid]; if(b[rr]+add[u]
>1; if(b[mid]+add[u]>=c)rr=mid; else ll=mid+1;// cout<
<<" "<
<<" "<
<
=C)ans++; } } return ans;}int A,B,C;int main(){// freopen("1.in","r",stdin); n=read();q=read(); for(register int i=1;i<=n;i++){ a[i]=read();b[i]=a[i]; } int t=sqrt(n); for(register int i=1;i<=t;i++){ L[i]=(i-1)*t+1; R[i]=i*t; } if(R[t]
>opr;A=read();B=read();C=read(); if(opr=='M')change(A,B,C); if(opr=='A')printf("%d\n",query(A,B,C));// for(register int i=1;i<=n;i++)printf("%d ",a[i]);// printf("\n");// for(register int i=1;i<=t;i++)printf("%d ",add[i]);// printf("\n"); } return 0;}

调试语句巨多,凑合看……


话说最近的博客为什么都是两句话说完的风格了啊一定是被fsy带坏了

转载于:https://www.cnblogs.com/kma093/p/10303272.html

你可能感兴趣的文章
平台维护流程
查看>>
2012暑期川西旅游之总结
查看>>
12010 解密QQ号(队列)
查看>>
2014年辛星完全解读Javascript第一节
查看>>
装配SpringBean(一)--依赖注入
查看>>
java选择文件时提供图像缩略图[转]
查看>>
方维分享系统二次开发, 给评论、主题、回复、活动 加审核的功能
查看>>
Matlab parfor-loop并行运算
查看>>
string与stringbuilder的区别
查看>>
2012-01-12 16:01 hibernate注解以及简单实例
查看>>
iOS8统一的系统提示控件——UIAlertController
查看>>
PAT甲级——1101 Quick Sort (快速排序)
查看>>
python创建进程的两种方式
查看>>
1.2 基础知识——关于猪皮(GP,Generic Practice)
查看>>
迭代器Iterator
查看>>
java易错题----静态方法的调用
查看>>
php建立MySQL数据表
查看>>
最简单的线程同步的例子
查看>>
旅途上看的电影和观后感
查看>>
Ztree异步树加载
查看>>