2017 Multi-University Training Contest - Team 1 Hints of sd0061 数列第K大

2023-11-06 09:10

本文主要是介绍2017 Multi-University Training Contest - Team 1 Hints of sd0061 数列第K大,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

根据题意卡常数

#include <bits/stdc++.h>
const long long mod = 1e9+7;
const double ex = 1e-10;
#define inf 0x3f3f3f3f
using namespace std;
int n,m;
unsigned A,B,C;
unsigned x,y,z;
map <int,unsigned> M;
unsigned rng61() {unsigned t;x ^= x << 16;x ^= x >> 5;x ^= x << 1;t = x;x = y;y = z;z = t ^ x ^ y;return z;
}
unsigned a[11234567];
struct querry
{int id;int q;unsigned ans;
}b[200];
bool cmpq(querry x,querry y)
{return x.q > y.q;
}
bool cmpid(querry x,querry y)
{return x.id < y.id;
}
int  part(int low, int  high)
{swap(a[high],a[(low+high)/2]);unsigned pivot = a[high];while(low < high){while(low < high&&a[low] <= pivot) low++;a[high] = a[low];while(low < high&&a[high] >= pivot) high--;a[low] = a[high];}a[high]=pivot;return high;
}
unsigned quicksort(int l, int  r, int  k){int  pos = part(l,r);if(pos  == k) return a[pos];else if(pos > k) return quicksort(l,pos-1,k);else return quicksort(pos+1,r,k);
}
int main()
{int cas = 0;while (~scanf("%d%d%u%u%u",&n,&m,&A,&B,&C)){M.clear();x = A, y = B, z = C;for (int i = 1; i<=n; i++){a[i] = rng61();}for (int i = 1; i<=m; i++){scanf("%d",&b[i].q);b[i].id = i;}sort(b+1,b+m+1,cmpq);int last = n;for (int i = 1; i <= m;i++){if (M.find(b[i].q+1)!=M.end()) b[i].ans = M[b[i].q+1];else b[i].ans = quicksort(1,last,b[i].q+1);M[b[i].q+1] = b[i].ans;last = b[i].q+1;}sort(b+1,b+m+1,cmpid);printf("Case #%d:",++cas);for (int i = 1; i<=m;i++)printf(" %u",b[i].ans) ;puts("");}return 0;
}
View Code

 

从最大的取值到最小的取值依次使用近似线性复杂度的求第 kk 小的方法即可,该方法的思想与快排相似,可以保证前 k - 1k1 小的元素都放置在第 kk 小元素的前面,这样枚举的时候就可以依次减少每次的枚举量。

http://bestcoder.hdu.edu.cn/blog/

转载于:https://www.cnblogs.com/HITLJR/p/7239475.html

这篇关于2017 Multi-University Training Contest - Team 1 Hints of sd0061 数列第K大的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/355712

相关文章

2014 Multi-University Training Contest 8小记

1002 计算几何 最大的速度才可能拥有无限的面积。 最大的速度的点 求凸包, 凸包上的点( 注意不是端点 ) 才拥有无限的面积 注意 :  凸包上如果有重点则不满足。 另外最大的速度为0也不行的。 int cmp(double x){if(fabs(x) < 1e-8) return 0 ;if(x > 0) return 1 ;return -1 ;}struct poin

2014 Multi-University Training Contest 7小记

1003   数学 , 先暴力再解方程。 在b进制下是个2 , 3 位数的 大概是10000进制以上 。这部分解方程 2-10000 直接暴力 typedef long long LL ;LL n ;int ok(int b){LL m = n ;int c ;while(m){c = m % b ;if(c == 3 || c == 4 || c == 5 ||

2014 Multi-University Training Contest 6小记

1003  贪心 对于111...10....000 这样的序列,  a 为1的个数,b为0的个数,易得当 x= a / (a + b) 时 f最小。 讲串分成若干段  1..10..0   ,  1..10..0 ,  要满足x非递减 。  对于 xi > xi+1  这样的合并 即可。 const int maxn = 100008 ;struct Node{int

AtCoder Beginner Contest 370 Solution

A void solve() {int a, b;qr(a, b);if(a + b != 1) cout << "Invalid\n";else Yes(a);} B 模拟 void solve() {qr(n);int x = 1;FOR(i, n) FOR(j, i) qr(a[i][j]);FOR(i, n) x = x >= i ? a[x][i]: a[i][x];pr2(

Post-Training有多重要?一文带你了解全部细节

1. 简介 随着LLM学界和工业界日新月异的发展,不仅预训练所用的算力和数据正在疯狂内卷,后训练(post-training)的对齐和微调方法也在不断更新。InstructGPT、WebGPT等较早发布的模型使用标准RLHF方法,其中的数据管理风格和规模似乎已经过时。近来,Meta、谷歌和英伟达等AI巨头纷纷发布开源模型,附带发布详尽的论文或报告,包括Llama 3.1、Nemotron 340

UVa 10820 Send a Table (Farey数列欧拉函数求和)

这里先说一下欧拉函数的求法 先说一下筛选素数的方法 void Get_Prime(){ /*筛选素数法*/for(int i = 0; i < N; i++) vis[i] = 1;vis[0] = vis[1] = 0;for(int i = 2; i * i < N; i++)if(vis[i]){for(int j = i * i; j < N; j += i)vis[j] =

CF Bayan 2015 Contest Warm Up B.(dfs+暴力)

B. Strongly Connected City time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output 题目链接: http://codeforces.com/contest/475/probl

CF Bayan 2015 Contest Warm Up A.(模拟+预处理)

A. Bayan Bus time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output 题目链接: http://codeforces.com/contest/475/problem/A The fi

AtCoder Beginner Contest 369 D - Bonus EXP 动态规划

原题链接: https://atcoder.jp/contests/abc369/tasks/abc369_d 思路:   这道题为什么要用动态规划呢,其实,对于第i个怪物,我们有打与不打两种处理方式,而对于打,我们是获得两倍的经验值,还是一倍的经验值,与我们打了奇数只怪物还是打了偶数只怪物有关了,因此我们定义dp[i][0] 为前i只怪物总共打了偶数次,dp[i][1] 为前i只怪物总

2017 版本的 WebStorm 永久破解

1.  在IntelliJ官网中下载 最新版本的WebStorm   下载地址:https://www.jetbrains.com/webstorm/download/#section=windows 2. 获取注册码    获取地址:http://idea.lanyus.com/   点击获取注册码,然后将注册码复制,再打开最新版的WebStorm,将注册码粘贴到激活框中就大功告