erfanul007

LOJ 1087

Mar 2nd, 2021
754
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <bits/stdc++.h>
  2. // #include <iostream>
  3. // #include <cstdio>
  4. // #include <cstdlib>
  5. // #include <algorithm>
  6. // #include <cmath>
  7. // #include <vector>
  8. // #include <set>
  9. // #include <map>
  10. // #include <queue>
  11. // #include <ctime>
  12. // #include <cassert>
  13. // #include <complex>
  14. // #include <string>
  15. // #include <cstring>
  16. // #include <queue>
  17. // #include <bitset>
  18.  
  19. using namespace std;
  20.  
  21. // #pragma GCC optimize("Ofast,no-stack-protector")n
  22. // #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
  23. // #pragma GCC optimize("unroll-loops")
  24.  
  25.  
  26. #define ll              long long int
  27. #define ull             unsigned long long int
  28. #define vi              vector< int >
  29. #define vll             vector< ll >
  30.  
  31. #define sc              scanf
  32. #define pf              printf
  33. #define cspf(i)         pf("Case %d:\n", i)
  34. #define spc             pf(" ")
  35. #define line            pf("\n")
  36.  
  37. #define ff              first
  38. #define ss              second
  39. #define mp              make_pair
  40. #define pb              push_back
  41. #define ppb             pop_back
  42. #define tp(v,j)         get<j>(v)
  43. #define Log(b,x)        (log(x)/log(b))
  44.  
  45. #define FOR(i,x,y)      for(int i = int(x); i < int(y); i++)
  46. #define ROF(i,x,y)      for(int i = int(x)-1; i >= int(y); i--)
  47. #define clr(arr,x)      memset(arr, x, sizeof arr)
  48. #define vout(v)         for(int w=0;w<(int)v.size();w++){if(w) spc; cout<<v[w];}
  49. #define all(v)          v.begin(), v.end()
  50. #define rall(v)         v.rbegin(), v.rend()
  51. #define unq(v)          sort(all(v)),(v).resize(unique(all(v))-v.begin())
  52. #define fastIO          ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr)
  53.  
  54. #define sc1(x)          sc("%d",&x)
  55. #define sc2(x,y)        sc("%d %d", &x, &y)
  56. #define sc3(x,y,z)      sc("%d %d %d", &x, &y, &z)
  57. #define scl1(x)         sc("%lld",&x);
  58. #define scl2(x,y)       sc("%lld %lld", &x, &y)
  59. #define scf1(x)         sc("%lf",&x)
  60. #define scf2(x,y)       sc("%lf %lf", &x, &y)
  61.  
  62. #define pf1(x)          pf("%d",x)
  63. #define pf2(x,y)        pf("%d %d", x, y)
  64. #define pf3(x,y,z)      pf("%d %d %d", x, y, z)
  65. #define pfl1(x)         pf("%lld",x)
  66. #define pfl2(x,y)       pf("%lld %lld",x,y)
  67.  
  68. #define MOD             1000000007
  69. #define MaxN            200002
  70. #define MAX             (int)(1e9)
  71. #define inf             0x3f3f3f3f
  72. #define PI              acos(-1.0)  // 3.1415926535897932
  73. #define eps             1e-9
  74.  
  75. template <class T> inline T bigMod(T p,T e,T M){T ret=1; for(;e>0;e>>=1){ if(e&1) ret=(ret*p)%M; p=(p*p)%M;} return (T)ret;}
  76. template <class T> inline T modInverse(T a,T M){return bigMod(a,M-2,M);}
  77. template <class T> inline T gcd(T a,T b){if(b==0)return a;return gcd(b,a%b);}
  78. template <class T> inline T lcm(T a,T b) {a=abs(a);b=abs(b); return (a/gcd(a,b))*b;}
  79. template <class T> inline T SQR(T a){return a*a;}
  80.  
  81. int dx[] = { 1,-1, 0, 0};                //graph moves
  82. int dy[] = { 0, 0, 1,-1};               //graph moves
  83.  
  84. int tree[3*MaxN], arr[MaxN];
  85.  
  86. void BuildTree(int node,int L,int R)
  87. {
  88.     if(L==R){
  89.         tree[node] = arr[L] ? 1 : 0;
  90.         return;
  91.     }
  92.     int mid = (L+R)/2;
  93.     int Left = 2*node;
  94.     int Right = Left+1;
  95.     BuildTree(Left,L,mid);
  96.     BuildTree(Right,mid+1,R);
  97.     tree[node] = tree[Left] + tree[Right];
  98. }
  99.  
  100. void UpdateTree(int node,int L,int R,int index, int val)
  101. {
  102.     if(L==index && R==index){
  103.         arr[index] = val;
  104.         tree[node] = 1;
  105.         return;
  106.     }
  107.     if(L>index || R<index) return;
  108.     int mid = (L+R)/2;
  109.     int Left = 2*node;
  110.     int Right = Left+1;
  111.     UpdateTree(Left,L,mid,index,val);
  112.     UpdateTree(Right,mid+1,R,index,val);
  113.     tree[node] = tree[Left] + tree[Right];
  114. }
  115.  
  116. void UpdateZero(int node,int L,int R,int index)
  117. {
  118.     if(L==index && R==index){
  119.         tree[node] = 0;
  120.         return;
  121.     }
  122.     if(L>index || R<index) return;
  123.     int mid = (L+R)/2;
  124.     int Left = 2*node;
  125.     int Right = Left+1;
  126.     UpdateZero(Left,L,mid,index);
  127.     UpdateZero(Right,mid+1,R,index);
  128.     tree[node] = tree[Left] + tree[Right];
  129. }
  130.  
  131. int RangeSum(int node,int L,int R,int x,int y)
  132. {
  133.     if(L>=x && R<=y){
  134.         return tree[node];
  135.     }
  136.     if(L>y || R<x) return 0;
  137.     int mid = (L+R)/2;
  138.     int Left = 2*node;
  139.     int Right = Left+1;
  140.     int sum1 = RangeSum(Left,L,mid,x,y);
  141.     int sum2 = RangeSum(Right,mid+1,R,x,y);
  142.     return sum1+sum2;
  143. }
  144.  
  145. int main()
  146. {
  147.     #ifndef ONLINE_JUDGE
  148.         clock_t tStart = clock();
  149.         freopen("input.txt", "r", stdin);
  150.         freopen("output.txt", "w", stdout);
  151.     #endif
  152.  
  153.     int t, ca=0; sc1(t);
  154.  
  155.     while(t--){
  156.         int n, q; sc2(n, q);
  157.         int mxN = n+50000;
  158.         clr(arr, 0);
  159.         clr(tree, 0);
  160.         FOR(i, 1, n+1) sc1(arr[i]);
  161.  
  162.         BuildTree(1,1,mxN);
  163.         cspf(++ca);
  164.  
  165.         while(q--){
  166.             int key;
  167.             char qtype;
  168.             sc(" %c %d", &qtype, &key);
  169.             if(qtype=='a'){
  170.                 n++;
  171.                 UpdateTree(1, 1, mxN, n, key);
  172.             }
  173.             else{
  174.                 int lo = 1, hi = n, mid, ans = 0;
  175.                 while(lo<=hi){
  176.                     mid = (lo+hi)/2;
  177.                     int sum = RangeSum(1, 1, mxN, 1, mid);
  178.                     if(sum > key) hi = mid-1;
  179.                     else if(sum < key) lo = mid+1;
  180.                     else{
  181.                         ans = mid;
  182.                         hi = mid-1;
  183.                     }
  184.                 }
  185.                 if(ans){
  186.                     pf1(arr[ans]); line;
  187.                     UpdateZero(1, 1, mxN, ans);
  188.                 }
  189.                 else pf("none\n");
  190.             }
  191.         }
  192.     }
  193.  
  194.     #ifndef ONLINE_JUDGE
  195.         fprintf(stderr, "\n>> Runtime: %.10fs\n", (double) (clock() - tStart) / CLOCKS_PER_SEC);
  196.     #endif
  197.  
  198.     return 0;
  199. }
RAW Paste Data

Adblocker detected! Please consider disabling it...

We've detected AdBlock Plus or some other adblocking software preventing Pastebin.com from fully loading.

We don't have any obnoxious sound, or popup ads, we actively block these annoying types of ads!

Please add Pastebin.com to your ad blocker whitelist or disable your adblocking software.

×