COJ 0967 WZJ的数据结构(负三十三)
| 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!
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<queue>
#include<cstring>
#define PAU putchar(' ')
#define ENT putchar('\n')
using namespace std;
const int maxn=+,maxb=,inf=-1u>>;
int z[maxn],st[maxb],en[maxb],size,n,A[maxn],B[maxn],set[maxb],siz[maxb];
inline int read(){
int x=,sig=;char ch=getchar();
for(;!isdigit(ch);ch=getchar())if(ch=='-')sig=;
for(;isdigit(ch);ch=getchar())x=*x+ch-'';
return sig?x:-x;
}
inline void write(int x){
if(x==){putchar('');return;}if(x<)putchar('-'),x=-x;
int len=,buf[];while(x)buf[len++]=x%,x/=;
for(int i=len-;i>=;i--)putchar(buf[i]+'');return;
}
void build(int b){
for(int i=st[b];i<=en[b];i++)B[i]=A[i];sort(B+st[b],B+en[b]+);return;
}
void down(int b){
if(set[b]!=inf){for(int i=st[b];i<=en[b];i++)A[i]=B[i]=set[b];set[b]=inf;}return;
}
void sett(int L,int R,int cv){
down(z[L]);for(int i=L;i<=R;i++)A[i]=cv;build(z[L]);return;
}
void setb(int L,int R,int cv){
for(int b=L;b<=R;b++)set[b]=cv;return;
}
void seto(int ql,int qr,int cv){
if(z[ql]==z[qr])sett(ql,qr,cv);
else sett(ql,en[z[ql]],cv),setb(z[ql]+,z[qr]-,cv),sett(st[z[qr]],qr,cv);return;
}
int queryb(int L,int R,int cv){
int ans=;
for(int b=L;b<=R;b++){
if(set[b]!=inf){
if(set[b]<=cv)ans+=siz[b];
}else ans+=upper_bound(B+st[b],B+en[b]+,cv)-B-st[b];
}return ans;
}
int queryt(int L,int R,int cv){
int ans=;
if(set[z[L]]!=inf){
if(set[z[L]]<=cv)ans+=(R-L+);
}else for(int i=L;i<=R;i++)if(A[i]<=cv)ans++;
return ans;
}
int queryo(int ql,int qr,int cv){
if(z[ql]==z[qr])return queryt(ql,qr,cv);
else return queryt(ql,en[z[ql]],cv)+queryb(z[ql]+,z[qr]-,cv)+queryt(st[z[qr]],qr,cv);
}
void init(){
n=read();size=sqrt((double)n*0.9);int tp,ql,qr,cv;
for(int i=;i<=n;i++){
A[i]=B[i]=read();
z[i]=(i-)/size+;
if(!st[z[i]])st[z[i]]=i;
en[z[i]]=i;
}
for(int b=;b<=z[n];b++)build(b),set[b]=inf,siz[b]=en[b]-st[b]+;
for(int i=;i<=n;i++){
tp=read();ql=read();qr=read();cv=read();
if(tp==)write(queryo(ql,qr,cv)),ENT;
else seto(ql,qr,cv);
}
return;
}
void work(){
return;
}
void print(){
return;
}
int main(){init();work();print();return ;}
总结一下这次WA的tip:queryt的时候窝萌是要暴力的呀。。。。。。。。。。。。
还有就是一开始没写B数组哦。。。。。。
COJ 0967 WZJ的数据结构(负三十三)的更多相关文章
- COJ 1003 WZJ的数据结构(三)ST表
WZJ的数据结构(三) 难度级别:B: 运行时间限制:3000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 请你设计一个数据结构,完成以下功能: 给定一个大小为N的 ...
- COJ967 WZJ的数据结构(负三十三)
WZJ的数据结构(负三十三) 难度级别:C: 运行时间限制:7000ms: 运行空间限制:262144KB: 代码长度限制:2000000B 试题描述 请你设计一个数据结构,完成以下功能: 给定一个大 ...
- COJ 0970 WZJ的数据结构(负三十)树分治
WZJ的数据结构(负三十) 难度级别:D: 运行时间限制:1000ms: 运行空间限制:262144KB: 代码长度限制:2000000B 试题描述 给你一棵N个点的无根树,点和边上均有权值.请你设计 ...
- COJ 0995 WZJ的数据结构(负五)区间操作
WZJ的数据结构(负五) 难度级别:C: 运行时间限制:1000ms: 运行空间限制:262144KB: 代码长度限制:2000000B 试题描述 请你设计一个数据结构,完成以下功能: 给定一个大小为 ...
- COJ 0979 WZJ的数据结构(负二十一)
WZJ的数据结构(负二十一) 难度级别:C: 运行时间限制:5000ms: 运行空间限制:262144KB: 代码长度限制:2000000B 试题描述 请你实现一个数据结构,完成这样的功能: 给你一个 ...
- COJ 0990 WZJ的数据结构(负十)
WZJ的数据结构(负十) 难度级别:D: 运行时间限制:5000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 给你一个N个节点的有根树,从1到N编号,根节点为1并给 ...
- COJ 0999 WZJ的数据结构(负一)
WZJ的数据结构(负一) 难度级别:D: 运行时间限制:1000ms: 运行空间限制:262144KB: 代码长度限制:2000000B 试题描述 输入N个模板串Pi和文本串T,输出每个模板串Pi在T ...
- COJ 0981 WZJ的数据结构(负十九)树综合
WZJ的数据结构(负十九) 难度级别:E: 运行时间限制:3500ms: 运行空间限制:262144KB: 代码长度限制:2000000B 试题描述 WZJ的数据结构中有很多都是关于树的.这让很多练习 ...
- COJ 1008 WZJ的数据结构(八) 树上操作
传送门:http://oj.cnuschool.org.cn/oj/home/problem.htm?problemID=986 WZJ的数据结构(八) 难度级别:E: 运行时间限制:3000ms: ...
随机推荐
- Java中获得程序当前路径的4中方法
Java中获得程序当前路径的4中方法: 在Application中: import java.util.*; public class TestUserDir { public static void ...
- Java基础知识强化之集合框架笔记34:List练习之集合的嵌套遍历
1. 需求: 我们班有学生,每一个学生是不是一个对象.所以我们可以使用一个集合表示我们班级的学生.ArrayList<Student> 但是呢,我们旁边是不是还有班级,每个班级是不是也是一 ...
- 第八篇:python高级之多进程
python高级之多进程 python高级之多进程 本节内容 多进程概念 Process类 进程间通讯 进程同步 进程池 1.多进程概念 multiprocessing is a package ...
- 14、SQL Server 存储过程
SQL Server 存储过程 存储过程类似函数,可以重复使用.相对于函数,存储过程拥有更强大的功能和更高的灵活性. 存储过程中可以包含逻辑控制语句和数据操作语句,可以接受参数,输出参数,返回单个值或 ...
- win7 下配置 java 环境变量
首先,你应该已经安装了 java 的 JDK 了,笔者安装的是:jdk-7u7-windows-x64 接下来主要讲怎么配置 java 的环境变量,也是为了以后哪天自己忘记了做个备份 1.进入“计算机 ...
- Weex 初始
1.一旦数据和模板绑定,数据的变化会立即体现在前台的变化 <template> <container> <text style="font-size: {{si ...
- Unity3D 常用事件
这里总结一下U3D常用的一些事件 //按下事件,GetKeyDown //抬起事件,Input.GetKeyUp //长按事件,Input.GetKey //任意键按下事件,Input.anyKeyD ...
- .net又一个生成缩略图的方法,不变形,非常好用
生成缩略图是一个十分常用功能,找到了一个方法,重写部分代码,实用又好用,.net又一个生成缩略图的方法,不变形 /// <summary> /// 为图片生成缩略图 by 何问起 /// ...
- Orace数据库锁表的处理与总结<摘抄与总结三>
当Oracle数据库发生TX锁等待时,如果不及时处理常常会引起Oracle数据库挂起,或导致死锁的发生,产生ORA-60的错误. TX锁等待的分析 Oracle数据库中一般使用行级锁. 当Oracle ...
- mysqldump备份、还原数据库路径名含有空格的处理方法(如:Program Files)
虽然以下的方法也可以解决,不过最简单直接的,还是直接在路径前后加双引号-" ",这个方法简单有效. 首先要说明的是mysqldump.exe在哪里不重要,重要的是要处理好路径中的非 ...