Submission #394120

#TimeUsernameProblemLanguageResultExecution timeMemory
394120SavicSCrayfish scrivener (IOI12_scrivener)C++14
0 / 100
458 ms152092 KiB
#include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> #include <bits/stdc++.h> #define fi first #define se second #define pb push_back #define sz(a) (int)a.size() #define all(a) a.begin(), a.end() #define rall(a) a.rbegin(), a.rend() #define ff(i,a,b) for(int i=a;i<=b;i++) #define fb(i,b,a) for(int i=b;i>=a;i--) using namespace std; using namespace __gnu_pbds; typedef long long ll; typedef pair<int,int> pii; const int maxn = 1000005; const int inf = 1e9 + 5; template<typename T> using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>; // os.order_of_key(k) the number of elements in the os less than k // *os.find_by_order(k) print the k-th smallest number in os(0-based) int idx = 0; int ls[50 * maxn], rs[50 * maxn], root[50 * maxn], bor[50 * maxn]; void update(int &v, int rv, int tl, int tr, int pos, int val){ v = ++idx, ls[v] = ls[rv], rs[v] = rs[rv], bor[v] = bor[rv]; if(tl == tr){ bor[v]= val; return; } int mid = (tl + tr) / 2; if(pos <= mid)update(ls[v], ls[rv], tl, mid, pos, val); else update(rs[v], rs[rv], mid + 1, tr, pos, val); } int kveri(int v, int tl, int tr, int l, int r){ if(!v || tl > r || l > tr)return 0; if(tl >= l && tr <= r)return bor[v]; int mid = (tl + tr) / 2; return kveri(ls[v], tl, mid, l, r) + kveri(rs[v], mid + 1, tr, l, r); } int id = 0; int br[50 * maxn]; void Init(){ id = 0; } const int N = 1e6 + 5; void TypeLetter(char C){ id += 1; int X = C - 'a'; br[id] = br[id - 1] + 1; update(root[id], root[id - 1], 1, N, br[id], X); } void UndoCommands(int X){ id += 1; root[id] = root[id - X - 1]; br[id] = br[id - X - 1]; } int GetLetter(int X){ X += 1; return kveri(root[id], 1, N, X, X); } //int main() //{ // ios::sync_with_stdio(false); // cout.tie(nullptr); // cin.tie(nullptr); // while(1){ // int t; // cin >> t; // // if(t == 1){ // char C; // cin >> C; // TypeLetter(C); // } // // if(t == 2){ // int X; // cin >> X; // UndoCommands(X); // } // // if(t == 3){ // int X; // cin >> X; // cout << char(GetLetter(X) + 'a') << endl; // } // // } // return 0; //} /** 1 a 1 b 3 1 1 d 2 2 2 1 3 2 1 e 2 1 2 5 1 c 3 2 // probati bojenje sahovski ili slicno **/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...