Advertisement
a53

easyxy

a53
Jan 12th, 2017
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.88 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define nmax 100002
  3. #define vmax 1000000000
  4. #define pb push_back
  5. using namespace std;
  6. ifstream fin("easyxy.in");
  7. ofstream fout("easyxy.out");
  8. vector <int> arb[4*nmax+55];
  9. int a[nmax];
  10. int n,m;
  11. int i;
  12.  
  13. void build(int nod,int st,int dr)
  14. {
  15. if(st==dr)
  16. {
  17. arb[nod].pb(a[st]);
  18. return;
  19. }
  20. int mij=(st+dr)/2;
  21. build(2*nod,st,mij);
  22. build(2*nod+1,mij+1,dr);
  23. int i,j;
  24. for(i=0,j=0;i<(int)arb[2*nod].size()&&j<(int)arb[2*nod+1].size();)
  25. {
  26. if(arb[2*nod][i]<=arb[2*nod+1][j])
  27. arb[nod].pb(arb[2*nod][i++]);
  28. else arb[nod].pb(arb[2*nod+1][j++]);
  29. }
  30. while(i<(int)arb[2*nod].size())
  31. arb[nod].pb(arb[2*nod][i++]);
  32. while(j<(int)arb[2*nod+1].size())
  33. arb[nod].pb(arb[2*nod+1][j++]);
  34. }
  35. int lwr;
  36. bool ok;
  37. void query(int nod,int st,int dr,int a,int b,int val)
  38. {
  39. if(a<=st&&dr<=b)
  40. {
  41. int p=upper_bound(arb[nod].begin(),arb[nod].end(),val)-arb[nod].begin();
  42. lwr+=p;
  43. if(p!=0)
  44. if(arb[nod][p-1]==val)ok=1;
  45. return;
  46. }
  47. int mij=(st+dr)/2;
  48. if(a<=mij)
  49. query(2*nod,st,mij,a,b,val);
  50. if(b>mij)
  51. query(2*nod+1,mij+1,dr,a,b,val);
  52. }
  53. int sol(int st,int dr,int poz)
  54. {
  55. int s=1,d=n,m,best=-1;
  56. while(s<=d)
  57. {
  58. m=s+(d-s)/2;
  59. lwr=0;
  60. ok=0;
  61. query(1,1,n,st,dr,a[m]);
  62. if(st+lwr-1>=poz)
  63. {
  64. if(ok==1)
  65. {
  66. best=a[m];
  67. if(st+lwr-1==poz)return a[m];
  68. }
  69. d=m-1;
  70. }
  71. else s=m+1;
  72. }
  73. return best;
  74. }
  75. int x,y,p;
  76. int main()
  77. {
  78. fin>>n>>m;
  79. for(i=1;i<=n;i++)
  80. fin>>a[i];
  81. build(1,1,n);
  82. for(i=1;i<=n;i++)
  83. a[i]=arb[1][i-1];
  84. while(m--)
  85. {
  86. fin>>x>>y>>p;
  87. fout<<sol(x,y,p)<<'\n';
  88. }
  89. return 0;
  90. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement