2019.10.02考试报告

T1

一般都能想到二分+取前m大正值,但是复杂度无法承受,我们发现要的是sum值,并不需要每个位置的准确值,

所以用可以nth_element把大于第m大的放右边即可。(原来nth还可以这么用)。

nth_element实现:

每次找一个base,小于base的放右边,大于的放右边

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int N=1e8+10;
 4 int n,k,a[N];
 5 inline int read()
 6 {
 7         register int sum,k=1;register char s;
 8         while(s=getchar(),s<‘0‘||s>‘9‘) if(s==‘-‘) k=-1; sum=s-‘0‘;
 9         while(s=getchar(),s>=‘0‘&&s<=‘9‘) sum=sum*10+s-‘0‘;
10         return k*sum;
11 }
12 void NTH(int k,int l,int r)
13 {
14         vector<int>v[3];
15         int x=a[l],tot=l-1;
16         for(int i=l;i<=r;i++)
17         {
18                 if(a[i]<x) v[0].push_back(a[i]);
19                 else if(a[i]==x) v[2].push_back(a[i]);
20                 else v[1].push_back(a[i]);
21         }
22         for(int i=0;i<v[0].size();i++) a[++tot]=v[0][i];
23         for(int i=0;i<v[2].size();i++) a[++tot]=v[2][i];
24         for(int i=0;i<v[1].size();i++) a[++tot]=v[1][i];
25         if(k<=v[0].size()) NTH(k,l,l+v[0].size()-1);
26         else if(k>v[0].size()&&k<=v[0].size()+v[2].size()) return;
27         else NTH(k-v[0].size()-v[2].size(),l+v[0].size()+v[2].size(),r);
28 }
29 int main()
30 {
31         //freopen("1.in","r",stdin);
32         //freopen("1.out","w",stdout);
33         n=read(),k=read();
34         for(int i=1;i<=n;i++) a[i]=read();
35         NTH(k,1,n);
36         printf("%d",a[k]);
37         return 0;
38 }

NTH

时间复杂度最坏O(n^2),但一般是O(n)的,空间O(n)(好像可以O(1)但咕了),跑1e7的点跑800ms。

然而T1卡手打nth_element,我和kx赛后都被卡了。

T2,T3

暂时咕了

原文地址:https://www.cnblogs.com/AthosD/p/11617885.html

时间: 2024-10-08 11:29:51

2019.10.02考试报告的相关文章

2019.10.03考试报告

10min:打完T1,为了不滑天下之大稽,打了一个对拍 50min:打完了T2T3的暴力,准备推一推T2. 2h:打完T3的正解和对拍. 3h:T3写了一个O(n*log2(n)*log2(n))的40分算法. 最后调T3的60分线段树调到考试结束也没过对拍. 期望分数:240 实际得分:200 就是因为这一个智障级的错误! 题解: T1 对于每个a[i],O(sqrt(a[i]))预处理出ta的所有约数,用map或hashmap存起来即可. T2 把商品和询问离线并按时间排序,枚举时间,是商品

2019.10.08考试报告

T1 用一个堆维护最小的是谁,每次加入一个值x时查询堆顶是否小于x,有则买top卖x,之后分为是不是反悔操作判断要不要把pop. 然而好像其他人都push两个来进行反悔操作. 1 #include<iostream> 2 #include<cstdio> 3 #include<cmath> 4 #include<cstring> 5 #include<queue> 6 #define int long long 7 using namespace

2019.10.18考试解题报告

总结 期望得分:\(100 + 100 + 10\) 实际得分:\(0 + 20 + 10\) 完美. 今天的考试格外完美,\(T1\)做了*\(2.5h\),最后换来了\(0\)分的好成绩,史无前例,美妙绝伦,我竟然不删调试,做得?好. \(T2\)是个好题,是个好阅读题,\(n\)和\(m\)写反了,样例给的是\(n\)和\(m\)相等的情况,最终完美\(100->20\),我竟然这么粗心,题目竟然没读好,做得?好. \(T3\)没时间了,都耗在\(T1\)上了,可惜\(T1\)还没有分,做

2019.07.12考试报告

这次被山大附中的大佬暴踩了. 0-1.5h 考试期间心态依旧很好,T1打了一个暴力,期望得分60分,T2打了dfs拿35分左右,T3直接输出样例,期望得分0分 1.5~2h 突然发现T1好像能O(q*n*log2(n))搞出来(类似退化版山海经),打了出来过了样例,还是不放心便对拍了一下,但是数据真的好难造啊T_T. 2~3.5h 有点不在状态,有可能是利哥中午的鼾声太魔性了,想了想T2的dp,成功把T2搞到了10分(hx输出样例15分) 考试结束 最终得分50+10+0=60分,拿了rank7

2019.08.05考试报告

用了几个月的Linux竟然对拍是错的: 原来./后面要直接加东西,我以前考试的对拍都是假的(怪不得造出的数据在运行对拍程序时不会变)... 话说,我竟然活到了现在? -1h:和skyh日常互相毒奶(我又成功了(大雾)) 0h:考试开始,心里面确实放空了,不去想自己的命运,自己的归属,专心干T1. 1h:T1顺利码出80分并用假对拍拍对了,同时开始打T3,好像是个奇袭? 1.5h:还是选择了直接去写暴力,因为这题的暴力分有50分,很肥很肥... 2h:有了T1的80分再去写T2就比较轻松了,发现是

2019.08.09考试报告

写在前面:穿校服真心有用啊,能加rp.说实话考的还不错,又回到了原来的状态了. (为了防止Deepinc认为博主能6分钟敲完一套对拍+正解,我还是把考试时间写清楚点吧.) 0h: 贪吃了一个雪糕导致迟到了...迎面撞上波波... 0-1h: T1打了一个错解,对拍刚开始没问题,便去看T2,看到一半的时候对拍n,m,k<=30出现了负数答案, 只好回来改T1,发现自己的式子是假的,多减了许多东西,便想到了容斥这个操作,10分钟推了推式子, 过了刚才出错了的数据,状态倍增. 1-2h: 打了T2的贪

2019.10.28~2019.10.31考试总结

连续几天的考试都没有总结,今天有些时间,总结一下这几场考试的情况. 10.28场 开场先读题,然后推了推T2,发现是水题.出于对期望的恐惧,没有选择研究T3,而是回头肝T1,想了很久,没有思路.打完T2,自己搓了一些数据,过了,回头打了T1的暴搜,再打了一个表,似乎部分分挺多的.再做T3,有点思路,但思路并不清晰,于是打了特殊数据就完了. 期望得分:70+100+20=190 最终得分:30+100+20=150 结果T1是DP,没看出来.唔...原题,地精部落,题果然还是做的太少了,有些人做过

2019.08.01考试报告

-3h:有点紧张,前两次考试爆炸,这次很关键(无论是对于信心还是对于分机房) -1h:好好地休息了一个中午,没浪- +1h:快速打完T1的暴力40分+线段树的正解,一边对拍一边开始打T2 +1.5h:woc这T2样例是假的吧?!打了两种dfs发现输出是一样的都是20,便不管它了 +2h:码完T3的暴力,码的过程中有点紧张,因为双线卡题而且T2暴力样例过不了. +2.5h:疯狂检查T2是不是读错题了,发现并没有,感觉要完戏了... +3h:卡了卡常,发现了T3的对手操作其实就是逻辑左移,但是没想出

2019.08.18考试报告

早上和skyh立flag:它在11机房虐场,我在10机房虐场.然而它考了rk1,我只拿到了rk3. T1 wxh学长讲的原题,13分钟打完正解+暴力+对拍拿到100分. T2正解复杂度$ O(n*log2(n)) $,我打的程序多了一个log,但还是可过的. 打完暴力后再打的正解,似乎很难实现? 调了1h左右,对怕出了错,发现算法需要二分找边界,所以直接先弃下去打T3了. T3码了一个dfs成功拿到10分... T2最后终于调过去啦,最后为了求稳进行了测试点分治最后WA了80. 在徐嘉一的帮助下