Hackerrank 2020 February 2014 解题报告
2014-02-28 23:50
756 查看
Hackerrank 2020 February 2014 解题报告
比赛链接
Sherlock and Watson (20分)
题意:给定一个数组,向右平移K次,然后有Q个询问,问第x位置上是几做法:直接模拟即可
#include <iostream> #include <cstdio> #include <algorithm> #include <vector> #include <set> #include <queue> #include <set> #include <map> #include <cstring> #include <functional> #include <cmath> typedef long long ll; using namespace std; int n,q,cmd,x,y,k; int a[10100]; int lsize = 128; vector<int> v[2000]; int maxid; int solve(int x,int y,int target){ int idx = x/lsize,idy=y/lsize; //cerr<<"idx="<<idx<<" idy="<<idy<<endl; int ans = 0; for(int i=x;i<lsize*(idx+1);i++){ if(a[i]<=target) ans++; } for(int i=idy*lsize;i<=y;i++){ if(a[i]<=target) ans++; } for(int i=idx+1;i<=idy-1;i++){ if(target < v[i][0]) continue; else if(target >= v[i].back()) ans+=v[i].size(); else { int tmp = upper_bound(v[i].begin(),v[i].end(),target)-v[i].begin(); ans+=tmp; } } return ans; } int main(){ //freopen("int.txt","r",stdin); //freopen("out1.txt","w",stdout); ios::sync_with_stdio(0); int cs; cin>>cs; while(cs--){ cin>>n; //lsize = (int)sqrt(n); for(int i=0;i<=n/lsize;i++) v[i].clear(); for(int i=0;i<n;i++) cin>>a[i]; maxid = 0; for(int i=0;i<n;i++){ int id = i/lsize; maxid = id+1; v[id].push_back(a[i]); } for(int i=0;i<maxid;i++){ sort(v[i].begin(),v[i].end()); } cin>>q; //cout<<"q="<<q<<endl; while(q--){ cin>>cmd; if(cmd == 1){ cin>>x>>k; x--; a[x] = k; int id = x/lsize; v[id].clear(); for(int i=id*lsize;i<n&&i<(id+1)*lsize;i++){ v[id].push_back(a[i]); } sort(v[id].begin(),v[id].end()); }else{ cin>>x>>y>>k; x--; y--; int idx = x/lsize,idy = y/lsize; if(idx == idy){ vector<int> tmp(a+x,a+y+1); sort(tmp.begin(),tmp.end()); cout<<tmp[k-1]<<endl; }else{ int lb = -1,ub=1001; while(ub-lb>1){ int mid = (ub+lb)/2; int rank = solve(x,y,mid); //cerr<<"mid="<<mid<<" rank="<<rank<<endl; if(rank >= k){ ub = mid; }else{ lb = mid; } } cout<<ub<<endl; } } } } return 0; }
View Code
相关文章推荐
- Div+Css
- 【剑指offer】链表相关-逆向输出
- Flex调用js方法传递参数
- Nodejs初阶之express
- javascript对象之Array
- JS关于对时间的处理
- Xcode 5 如何禁用某个文件ARC(Automatic Reference Counting)
- javascript推荐书籍
- css样式 float的理解
- pip安装软件出现time out或者fetch异常的解决方法
- Knockout JS实现任务管理应用程序
- 前端开发组规范
- 【转】使用HTML5的十大原因
- css 定位
- Particle effect-2 Custom define properties
- jQuery插件开发
- Chapter 2 JavaScript Basic
- 【OpenCV2.3特征检测与描述】Feature Detection and Description
- javascript之对象初识
- Servlet/jsp和Action/jsp传值