UVA12003 Array Transformer(数组分块)
题解:(分块思想)
1.把这个数组分成sqrt(n)sqrt(n)sqrt(n)个块,对于每个块对他进行从小到大排序。
2.查询L-R的所在块,第一个块和最后一个块进行暴力查找,中间的块二分查找,把所有的数量累加起来即可。
3.修改直接把原数组的值给修改好,然后对于这个包含这个位置的块给全部从新赋一遍对应的原数组的值,然后对当前快进行sort即可。
/*Keep on going Never give up*/
#pragma GCC optimize(3,"Ofast","inline")
#include<bits/stdc++.h>
#define int long long
#define endl '\n'using namespace std;
const int maxn=3e5+10;
const int mod=1e9+7;vector<int> v[600];
int sz;
int a[maxn];int query(int l,int r,int val){int lft=l/sz,rht=r/sz;int res=0;if(lft==rht){for(int i=l;i<=r;i++){if(a[i]<val) res++;}}else{for(int i=l;i<(l/sz+1)*sz;i++){ //第一块if(a[i]<val) res++;}for(int i=(r/sz)*sz;i<=r;i++){ //最后一块if(a[i]<val) res++;}for(int i=lft+1;i<rht;i++){ //中间块int t=lower_bound(v[i].begin(),v[i].end(),val)-v[i].begin();res+=t;}}return res;
}
int n,m,u;
void modify(int pos){int s=pos/sz;for(int i=0;i<sz;i++){v[s][i]=a[s*sz+i];if(s*sz+i==n-1) break;}sort(v[s].begin(),v[s].end());
}
signed main() {ios::sync_with_stdio(false);cin.tie(0);cin>>n>>m>>u;sz=sqrt(n);for(int i=0;i<n;i++){cin>>a[i];v[i/sz].push_back(a[i]);}for(int i=0;i<=sz;i++){sort(v[i].begin(),v[i].end());}while(m--){int l,r,val,p;cin>>l>>r>>val>>p;int xx=query(l-1,r-1,val);a[p-1]=(u*xx)/(r-l+1);modify(p-1);}for(int i=0;i<n;i++){cout<<a[i]<<endl;}}
UVA12003 Array Transformer(数组分块)相关推荐
- C++Dynamic Array动态数组(附完整源码)
Dynamic Array动态数组 Dynamic Array动态数组算法的完整源码(定义,实现,main函数测试) Dynamic Array动态数组算法的完整源码(定义,实现,main函数测试) ...
- c++ 的vector、array和数组的比较
在c++11中,STL中提拱了一个新的容器std::array,该容器在某些程度上替代了之前版本的std::vector的使用,更可以替代之前的自建数组的使用.那针对这三种不同的使用方式,先简单的做个 ...
- java 使用 java.util.Collections.addAll( list, array ) 将数组转成 list
// java 使用 java.util.Collections 将数组转成 list List<String> list1 = new ArrayList<String>() ...
- php array 关联数组,php array_merge关联数组
我正在尝试将一个项目添加到关联数组的开头.我认为最好的方式是使用array_merge,但我有一些奇怪的后果.我从mysql数据库获取产品的id和Name,并将它作为关联数组返回,就像这样(不是实际的 ...
- Array.asList:数组转list时你一定要知道的“陷阱”!
最近开发中,业务上处理,经常用到asList方法,这让我不经想起了它的很多容易让人犯错的地方或者误解的地方,所以就想抽出时间来,整理一下,和大家分享出来,深夜了,话不多说,主要以代码为主,简易的代码, ...
- [CareerCup] 17.6 Sort Array 排列数组
17.6 Given an array of integers, write a method to find indices m and n such that if you sorted elem ...
- [Leetcode] Merge Sorted Array 合并数组
Merge Sorted Array 最新更新请见:https://yanjia.me/zh/2019/02/... Given two sorted integer arrays nums1 and ...
- JavaScript之 Array(数组) 对象
一. 什么是数组? 数组对象是使用单独的变量名来存储一系列的值. 如果你有一组数据(例如:车名字),存在单独变量如下所示: var car1="Saab"; var car2=&q ...
- POJ3468-A Simple Problem with Integers【线段树,树状数组,分块】
正题 题目链接:我是链接 其实洛谷线段树模板也是一样的:三种方法AC评测链接 题目大意 要求支持区间修改,区间求和. 线段树 直接用一个lazy标记,在之前的博客里有说 code1 #include& ...
最新文章
- Java 程序员薪资这么高,取决于什么?
- 【Android APT】编译时技术 ( 开发编译时注解 )
- Python学习相关资料
- Java中String做为synchronized同步锁
- 微服务升级_SpringCloud Alibaba工作笔记0003---理解spring webflux_响应式堆栈_提高微服务吞吐量和伸缩性
- ASP.NET MVC+LINQ开发一个图书销售站点(6):创建数据层
- [sed] linux sed 批量替换字符串-转
- Python脚本实现深大校园网网页登陆
- python简明教程_01
- 解决用wps另存dbf格式文件,丢失只转换了部分数据
- 用HTML+CSS做一个漂亮简单的轻量级图片相册博客网站(web前端期末大作业)
- linux 触屏校准命令,tslib-触摸屏校准
- 数独高阶技巧之八——SDC
- java for 下标_java中foreach语句如何获取数组下标
- php中文乱码问号,php中文问号乱码怎么办
- linux开机dracut界面_linux开机启动步骤详解
- 【Python网络爬虫实战篇】使用selenium+requests爬取下载高清源视频:关于爬取m3u8文件链接解析为ts视频合并成mp4视频的分析实战
- 程序员学c语言吗,为什么程序员要学C语言
- QT使用QMovie播放Gif动画
- H3CNE学习5 STP