比赛 ctime蒟蒻生日赛 评测结果 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
题目名称 K小数 最终得分 100
用户昵称 Hzoi_Mafia 运行时间 2.172 s
代码语言 C++ 内存使用 222.66 MiB
提交时间 2017-10-17 20:05:11
显示代码纯文本
  1. #include<algorithm>
  2. #include<iostream>
  3. #include<cstring>
  4. #include<cstdio>
  5. using namespace std;
  6. inline int read(){
  7. int sum(0),f(1);
  8. char ch(getchar());
  9. for(;ch<'0'||ch>'9';ch=getchar())
  10. if(ch=='-')
  11. f=-1;
  12. for(;ch>='0'&&ch<='9';sum=sum*10+(ch^48),ch=getchar());
  13. return sum*f;
  14. }
  15. int n,m;
  16. int v[100005],num[100005];
  17. int cnt,size;
  18. int rt[100005],lch[20000005],rch[20000005],sum[20000005];
  19. inline void update(int &x,int las,int pos,int l,int r){
  20. x=++cnt;
  21. lch[x]=lch[las];
  22. rch[x]=rch[las];
  23. sum[x]=sum[las]+1;
  24. if(l==r)
  25. return;
  26. int mid((l+r)>>1);
  27. if(pos<=mid)
  28. update(lch[x],lch[las],pos,l,mid);
  29. else
  30. update(rch[x],rch[las],pos,mid+1,r);
  31. }
  32. inline int query(int x,int y,int l,int r,int k){
  33. if(l==r)
  34. return l;
  35. int mid((l+r)>>1),cnt(sum[lch[y]]-sum[lch[x]]);
  36. if(k<=cnt)
  37. return query(lch[x],lch[y],l,mid,k);
  38. else
  39. return query(rch[x],rch[y],mid+1,r,k-cnt);
  40. }
  41. inline int gg(){
  42. freopen("kthnumber.in","r",stdin);
  43. freopen("kthnumber.out","w",stdout);
  44. n=read(),m=read();
  45. for(int i=1;i<=n;++i)
  46. num[i]=v[i]=read();
  47. sort(num+1,num+n+1);
  48. size=unique(num+1,num+n+1)-num-1;
  49. for(int i=1;i<=n;++i){
  50. v[i]=lower_bound(num+1,num+size+1,v[i])-num;
  51. update(rt[i],rt[i-1],v[i],1,size);
  52. }
  53. while(m--){
  54. int x(read()),y(read()),k(read());
  55. printf("%d\n",num[query(rt[x-1],rt[y],1,size,k)]);
  56. }
  57. return 0;
  58. }
  59. int K(gg());
  60. int main(){;}