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

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

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

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

操作2:每次操作给你l,r,v三个参数,将Al至Ar中每个数的值+v。

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

题解:分块,每一块sort,然后就没有然后了呢,注意二分。

 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=450,inf=-1u>>1;
11 int B[maxn],add[maxb],st[maxb],en[maxb],A[maxn],S[maxn],n,size,Q;
12 inline int read(){
13     int x=0,sig=1;char ch=getchar();
14     while(!isdigit(ch)){if(ch=='-') sig=-1;ch=getchar();}
15     while(isdigit(ch)) x=10*x+ch-'0',ch=getchar();
16     return x*=sig;
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 int ans,cv;
24 void query(int L,int R){for(int i=L;i<=R;i++)if(S[i]+add[B[i]]<=cv)ans++;return;}
25 void queryb(int ql,int qr){
26     //printf("%d %d\n",ql,qr);
27     int M,s,L,R;
28     for(int b=ql;b<=qr;b++){
29         if(A[st[b]]+add[b]>cv) continue;
30         s=st[b];L=st[b];R=en[b]+1;
31         while(L+1<R){
32             //printf("%d %d\n",L,R);
33             M=L+R>>1;
34             if(A[M]+add[b]<=cv) L=M;
35             else R=M;
36         }
37         ans+=L-s+1;
38     } return;
39 }
40 void addt(int L,int R){for(int i=L;i<=R;i++)S[i]+=cv;for(int i=st[B[L]];i<=en[B[L]];i++)A[i]=S[i];sort(A+st[B[L]],A+en[B[L]]+1);return;}
41 void addb(int L,int R){for(int b=L;b<=R;b++)add[b]+=cv;return;}
42 void init(){
43     n=read();int cnt=0;size=(int)sqrt(1.1*n);
44     B[0]=1;
45     for(int i=1;i<=n;i++){
46         S[i]=A[i]=read();
47         if(++cnt==size) B[i]=B[i-1]+1,cnt=0;
48         else B[i]=B[i-1];
49         if(!st[B[i]]) st[B[i]]=i;
50         en[B[i]]=i;
51         //printf("%d ",B[i]);
52     }//puts("");
53     Q=read();
54     for(int b=1;b<=B[n];b++)sort(A+st[b],A+en[b]+1);
55     return;
56 }
57 void work(){
58     int tp,ql,qr;
59     while(Q--){
60         tp=read();ql=read();qr=read();cv=read();
61         //printf("%d %d %d %d\n",tp,ql,qr,cv);
62         if(!tp){
63             ans=0;
64             if(B[ql]==B[qr]) query(ql,qr);
65             else queryb(B[ql]+1,B[qr]-1),query(ql,en[B[ql]]),query(st[B[qr]],qr);
66             write(ans);ENT;
67         }
68         else{
69             if(B[ql]==B[qr]) addt(ql,qr);
70             else addb(B[ql]+1,B[qr]-1),addt(ql,en[B[ql]]),addt(st[B[qr]],qr);
71         }
72     }
73     return;
74 }
75 void print(){
76     return;
77 }
78 int main(){
79     init();work();print();return 0;
80 }

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

COJ 0995 WZJ的数据结构(负五)区间操作相关推荐

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

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

  2. 利用伸展树提高区间操作的性能

    一.首先,什么是区间操作?以及各种数据结构性能对比 区间操作就是对一个序列的某个区间的所有元素进行的操作.比如,对区间所有元素增加一个值,翻转区间元素等. 对区间操作,最普通的方法就是数组.比如:对一 ...

  3. 数据结构(五)层次遍历

    数据结构(五)层次遍历 // linear_listqueue.cpp : This file contains the 'main' function. Program execution begi ...

  4. 数据结构:五岔路口交通灯问题

    数据结构:五岔路口交通灯问题 网上有很多关于这个问题的文章,但是基本都是用的贪心算法,贪心算法的思路比较简单,而且时间复杂度是多项式级别的,但是贪心算法得到的最终结果并不能保证是最优解.所以,这里我写 ...

  5. BUAA数据结构第五次作业2023

    文章目录 BUAA数据结构第五次作业2023 1. 树叶节点遍历(树-基础题) 题目 问题描述 输入形式 输出形式 样例输入 样例输出 样例说明 评分标准 问题分析 具体处理过程 完整代码 2. 词频 ...

  6. 负五伏稳压电源__对你,哥无语了,只有刻苦铭心

    学电子的,你说没有电源怎么学?所有模块最基础的能源提供就来源于电源,而单片机中,用到最多的就是正负五伏,和3.3伏可调电源了,所以今天下午试着做一个全电源出来,上面包涵了正负五伏,3.3伏,外加一个可 ...

  7. Selenium2(WebDriver)总结(五)---元素操作进阶(常用类)

    Selenium2(WebDriver)总结(五)---元素操作进阶(常用类) 1.Alert类 Alert是指windows弹窗的一些操作,需要new一个Alert类 driver.switchTo ...

  8. Active Directory 定义了五种操作主机角色

    Active Directory 定义了五种操作主机角色(又称FSMO): 1.架构主机 schema master 2.域命名主机 domain naming master 3.相对标识号 (RID ...

  9. 顺序表输入栈元素c语言,C语言数据结构之栈简单操作

    C语言数据结构之栈简单操作 实验: 编写一个程序实现顺序栈的各种基本运算,并在此基础上设计一个主程序,完成如下功能: (1)初始化顺序栈 (2)插入元素 (3)删除栈顶元素 (4)取栈顶元素 (5)遍 ...

最新文章

  1. 如何重装Citrix XenServer不丢失SR数据
  2. 致远表单代办状态删除
  3. 安卓键盘加上数字_Android自定义键盘的实现(数字键盘和字母键盘)
  4. RocketMQ中主从复制
  5. dell主板40针开机针脚_技术活!戴尔主板的前置面板接口针脚的问题。
  6. [深度学习-实践]CycleGAN的入门例子-Tensorflow2.1-keras
  7. UVA10990 Another New Function【欧拉函数打表】
  8. popen和pclose
  9. Qt_QTableWidget用法 添加、删除、添加控件、获取控件在表格中位置
  10. 基于C# 和Access数据库的电影院管理系统
  11. Yapi 配置 pm2服务
  12. postgresql 的json 和jsonb 的使用
  13. 阿里的简历多久可以投递一次?次数多了有没有影响?可以同时进行吗?
  14. CBOW(Continous Bag of Words)模型学习(2020-08-19)
  15. 【GEE笔记5】数据筛选Filter
  16. 【洛谷4735】 最大异或和(可持久化01Trie)
  17. 运算放大器基础知识:什么是运算放大器?
  18. 每周推荐短视频:商用车实现无人驾驶的目的是什么?
  19. 模拟设计的100条圣经(汉化版)
  20. 你说学习重要,还是经营人脉重要

热门文章

  1. Ajax Upload多文件上传插件翻译及中文演示
  2. docker 安装 oracle12,使用Docker安装Oracle 12c
  3. 终端软件升级功能开发_5个很棒的终端技巧可帮助您升级为开发人员
  4. golang socket读写同时_epoll在Golang的应用
  5. PMP®考试是什么机构
  6. 【UI设计培训基础知识】设计中的点线面-线
  7. linux 查看域名解析,linux查询服务器域名解析记录
  8. java实现redis缓存_java实现redis缓存功能
  9. You can't specify target table for update in FROM clause
  10. 阿里云 Aliplayer高级功能介绍(二):缩略图