WZJ的数据结构(负三十三)
难度级别:E; 运行时间限制:7000ms; 运行空间限制:262144KB; 代码长度限制:2000000B
试题描述

请你设计一个数据结构,完成以下功能:

给定一个大小为N的整数组A,要求你回答执行N次操作。操作分两种:

操作1:每次操作给你l,r,v三个参数,求Al至Ar中值<=v的个数。

操作2:每次操作给你l,r,v三个参数,将Al至Ar所有数的值设为v。

输入
第一行为一个正整数N。
第二行为N个整数Ai。
接下来N行每行4个正整数t,l,r,v。若t=2表示操作1,t=1表示操作2。
输出
对每个操作1输出结果。
输入示例
6
1 2 2 1 2 3
2 1 4 2
2 1 4 1
1 2 4 1
2 1 4 1
1 3 5 2
2 2 5 2
输出示例
4
2
4
4
其他说明
1<=N<=200000
1<=Ai,v<=10^9

题解:标程肯定是什么线段树分治什么的奇怪的东西,窝不会写呀,,,就写分块吧,于是就虐标程了哦,excited!

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cmath>
 4 #include<algorithm>
 5 #include<queue>
 6 #include<cstring>
 7 #define PAU putchar(' ')
 8 #define ENT putchar('\n')
 9 using namespace std;
10 const int maxn=200000+10,maxb=500,inf=-1u>>1;
11 int z[maxn],st[maxb],en[maxb],size,n,A[maxn],B[maxn],set[maxb],siz[maxb];
12 inline int read(){
13     int x=0,sig=1;char ch=getchar();
14     for(;!isdigit(ch);ch=getchar())if(ch=='-')sig=0;
15     for(;isdigit(ch);ch=getchar())x=10*x+ch-'0';
16     return sig?x:-x;
17 }
18 inline void write(int x){
19     if(x==0){putchar('0');return;}if(x<0)putchar('-'),x=-x;
20     int len=0,buf[15];while(x)buf[len++]=x%10,x/=10;
21     for(int i=len-1;i>=0;i--)putchar(buf[i]+'0');return;
22 }
23 void build(int b){
24     for(int i=st[b];i<=en[b];i++)B[i]=A[i];sort(B+st[b],B+en[b]+1);return;
25 }
26 void down(int b){
27     if(set[b]!=inf){for(int i=st[b];i<=en[b];i++)A[i]=B[i]=set[b];set[b]=inf;}return;
28 }
29 void sett(int L,int R,int cv){
30     down(z[L]);for(int i=L;i<=R;i++)A[i]=cv;build(z[L]);return;
31 }
32 void setb(int L,int R,int cv){
33     for(int b=L;b<=R;b++)set[b]=cv;return;
34 }
35 void seto(int ql,int qr,int cv){
36     if(z[ql]==z[qr])sett(ql,qr,cv);
37     else sett(ql,en[z[ql]],cv),setb(z[ql]+1,z[qr]-1,cv),sett(st[z[qr]],qr,cv);return;
38 }
39 int queryb(int L,int R,int cv){
40     int ans=0;
41     for(int b=L;b<=R;b++){
42         if(set[b]!=inf){
43             if(set[b]<=cv)ans+=siz[b];
44         }else ans+=upper_bound(B+st[b],B+en[b]+1,cv)-B-st[b];
45     }return ans;
46 }
47 int queryt(int L,int R,int cv){
48     int ans=0;
49     if(set[z[L]]!=inf){
50         if(set[z[L]]<=cv)ans+=(R-L+1);
51     }else for(int i=L;i<=R;i++)if(A[i]<=cv)ans++;
52     return ans;
53 }
54 int queryo(int ql,int qr,int cv){
55     if(z[ql]==z[qr])return queryt(ql,qr,cv);
56     else return queryt(ql,en[z[ql]],cv)+queryb(z[ql]+1,z[qr]-1,cv)+queryt(st[z[qr]],qr,cv);
57 }
58 void init(){
59     n=read();size=sqrt((double)n*0.9);int tp,ql,qr,cv;
60     for(int i=1;i<=n;i++){
61         A[i]=B[i]=read();
62         z[i]=(i-1)/size+1;
63         if(!st[z[i]])st[z[i]]=i;
64         en[z[i]]=i;
65     }
66     for(int b=1;b<=z[n];b++)build(b),set[b]=inf,siz[b]=en[b]-st[b]+1;
67     for(int i=1;i<=n;i++){
68         tp=read();ql=read();qr=read();cv=read();
69         if(tp==2)write(queryo(ql,qr,cv)),ENT;
70         else seto(ql,qr,cv);
71     }
72     return;
73 }
74 void work(){
75     return;
76 }
77 void print(){
78     return;
79 }
80 int main(){init();work();print();return 0;}

总结一下这次WA的tip:queryt的时候窝萌是要暴力的呀。。。。。。。。。。。。

还有就是一开始没写B数组哦。。。。。。

转载于:https://www.cnblogs.com/chxer/p/4717039.html

COJ 0967 WZJ的数据结构(负三十三)相关推荐

  1. COJ 0995 WZJ的数据结构(负五)区间操作

    WZJ的数据结构(负五) 难度级别:C: 运行时间限制:1000ms: 运行空间限制:262144KB: 代码长度限制:2000000B 试题描述 请你设计一个数据结构,完成以下功能: 给定一个大小为 ...

  2. COJ 1008 WZJ的数据结构(八) 树上操作

    传送门:http://oj.cnuschool.org.cn/oj/home/problem.htm?problemID=986 WZJ的数据结构(八) 难度级别:E: 运行时间限制:3000ms: ...

  3. OpenCV学习笔记(三十一)——让demo在他人电脑跑起来 OpenCV学习笔记(三十二)——制作静态库的demo,没有dll也能hold住 OpenCV学习笔记(三十三)——用haar特征训练自己

    OpenCV学习笔记(三十一)--让demo在他人电脑跑起来 这一节的内容感觉比较土鳖.这从来就是一个老生常谈的问题.学MFC的时候就知道这个事情了,那时候记得老师强调多次,如果写的demo想在人家那 ...

  4. 学习Java的三十三个建议

    学习Java的三十三个建议 1把Java当成一门新的语言学习(和C++差别很大,真的,我觉得和Delphi的Object Pas cal反而更像一点): 2看<Thinking in Java& ...

  5. [Python从零到壹] 三十三.图像处理基础篇之什么是图像处理和OpenCV配置

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  6. 高级shell编程笔记(第三十三章 杂项)

    第三十三章 杂项 33.1 交互式和非交互式的shell和脚本 交互式的shell在tty终端从用户的输入中读取命令.另一方面,shell能在启动时读取启动文件,显示一个提示符并默认激活作业控制.用户 ...

  7. 计算机网络 - 练习(二百三十三)

    计算机网络 练习(二百三十三) 以下关于入侵检测系统的描述中,正确的是(). A. 实现内外网隔离与访问控制 B. 对进出网络的信息进行实时的监测与比对,及时发现攻击行为 C. 隐藏内部网络拓扑 D. ...

  8. 左耳听风 第三十三周

    左耳听风 第三十三周 每周完成一个ARTS: 每周至少做一个 leetcode 的算法题.阅读并点评至少一篇英文技术文章.学习至少一个技术技巧.分享一篇有观点和思考的技术文章.(也就是 Algorit ...

  9. [系统安全] 三十三.恶意代码检测(3)基于机器学习的恶意代码检测技术

    您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列.因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全.逆向分 ...

  10. 美学心得(第二百三十三集) 罗国正

    美学心得(第二百三十三集) 罗国正 (2022年1月) 3005.查礼是清朝画家,一生好古印章.金石.书画.收藏.擅长画山水花鸟,特长是画墨梅,他官至湖南巡抚.下面介绍他的主要美学思想: 1.强调文人 ...

最新文章

  1. Unity与C#创建一个3D平台游戏 Learn to Create a 3D Platformer Game with Unity C#
  2. linux tar 提示 time stamp xxx in the future 解决方法
  3. html标签article,html标签中section与article 区别
  4. linux下db2创建批量存储过程,DB2批量执行SQL脚本以及存储过程的实现
  5. WinForm实现简单的拖拽文件到出题的功能(C#)(3)
  6. springframework包下的RequestContextHolder类和ServletRequestAttributes类的源码和使用
  7. LeetCode 125. Valid Palindrome
  8. 【ASP.NET】基础补习之验证控件
  9. 特斯拉股价周五收盘下跌7.38% 此前公布第三季度交付量创新高
  10. 使用matlab进行三角函数拟合
  11. ROS机器人更换新雷达需要重新配置carto和navigation的哪些参数
  12. Ubuntu解决text file busy
  13. c 语言rand()生成随机数
  14. ThinkpadE450 Win8改Win7 BIOS设置图解
  15. win7空文件夹删不掉的原因及解决方法
  16. 有什么助于睡眠的方法,睡眠不好,一定要知道这些方法
  17. AD怎么输入坐标_CAD入门基础小知识(二)捕捉栅格绘制直线amp;使用坐标绘图...
  18. 实战Nagios NSCA方式监控Linux系统资源使用情况 -- Nagios配置篇 -- 被监控端
  19. github中clone代码到本地与直接下载压缩包的区别
  20. Java--实验一(2)

热门文章

  1. 如何判断你和优秀AI算法工程师之间的差异?
  2. 【ESIM】论文阅读笔记:文本蕴含之ESIM
  3. 深度学习TF—2.TensorFlow2高阶操作
  4. 3.1 API : DecisionTreeClassifier、DecisionTreeRegressor
  5. [论文笔记]Poly-encoders: architectures and pre-training strategies for fast and accurate multi-sentence
  6. pytorch基础知识
  7. HarmonyOS IoT首著,走进万物互联的世界!
  8. 10本畅销全球的技术经典,这次整个大的
  9. 算法与数据中台:网约车业务实践
  10. 为什么你会觉得微服务架构很别扭