Submission #237261

# Submission time Handle Problem Language Result Execution time Memory
237261 2020-06-05T14:05:23 Z Autoratch Crayfish scrivener (IOI12_scrivener) C++14
100 / 100
516 ms 205688 KB
#include <bits/stdc++.h>
using namespace std;

const int N = 1e6 + 1;

int n = N-1,ver,cnt,root[N],len[N];
struct node{ char c; int left,right; }tree[N*20];

int clone(int x){ tree[++cnt] = tree[x]; return cnt; }

void build(int l,int r,int idx)
{
    tree[idx] = {0,idx*2,idx*2+1};
    cnt = max(cnt,idx);
    if(l==r) return;
    int m = (l+r)/2;
    build(l,m,idx*2),build(m+1,r,idx*2+1);
}

int update(int l,int r,int idx,int x,char c)
{
    int now = clone(idx);
    if(l==r)
    {
        tree[now] = {c,idx,idx};
        return now;
    }
    int m = (l+r)/2;
    if(x<=m) tree[now].left = update(l,m,tree[now].left,x,c);
    else tree[now].right = update(m+1,r,tree[now].right,x,c);
    return now;
}

char read(int l,int r,int idx,int x)
{
    if(l==r) return tree[idx].c;
    int m = (l+r)/2;
    if(x<=m) return read(l,m,tree[idx].left,x);
    else return read(m+1,r,tree[idx].right,x);
}

void Init(){ build(1,n,1),root[0] = 1; }

void TypeLetter(char c){ root[ver+1] = update(1,n,root[ver],len[ver]+1,c),len[ver+1] = len[ver]+1,ver++; }

void UndoCommands(int u){ root[ver+1] = root[ver-u],len[ver+1] = len[ver-u],ver++; }

char GetLetter(int x){ return read(1,n,root[ver],x+1); }
# Verdict Execution time Memory Grader output
1 Correct 25 ms 24952 KB Output is correct
2 Correct 25 ms 24960 KB Output is correct
3 Correct 24 ms 24952 KB Output is correct
4 Correct 27 ms 24960 KB Output is correct
5 Correct 27 ms 24960 KB Output is correct
6 Correct 25 ms 24960 KB Output is correct
7 Correct 26 ms 24952 KB Output is correct
8 Correct 24 ms 24960 KB Output is correct
9 Correct 25 ms 24960 KB Output is correct
10 Correct 26 ms 24960 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 24 ms 24952 KB Output is correct
2 Correct 25 ms 24960 KB Output is correct
3 Correct 25 ms 24960 KB Output is correct
4 Correct 24 ms 24960 KB Output is correct
5 Correct 25 ms 24960 KB Output is correct
6 Correct 24 ms 24952 KB Output is correct
7 Correct 24 ms 24960 KB Output is correct
8 Correct 25 ms 24960 KB Output is correct
9 Correct 24 ms 24960 KB Output is correct
10 Correct 24 ms 24960 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 25 ms 25344 KB Output is correct
2 Correct 26 ms 25344 KB Output is correct
3 Correct 26 ms 25472 KB Output is correct
4 Correct 26 ms 25728 KB Output is correct
5 Correct 26 ms 25472 KB Output is correct
6 Correct 27 ms 25856 KB Output is correct
7 Correct 27 ms 25856 KB Output is correct
8 Correct 27 ms 25728 KB Output is correct
9 Correct 26 ms 25728 KB Output is correct
10 Correct 26 ms 25472 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 395 ms 173176 KB Output is correct
2 Correct 397 ms 188664 KB Output is correct
3 Correct 415 ms 185080 KB Output is correct
4 Correct 444 ms 151672 KB Output is correct
5 Correct 467 ms 163704 KB Output is correct
6 Correct 396 ms 202360 KB Output is correct
7 Correct 435 ms 108764 KB Output is correct
8 Correct 420 ms 154232 KB Output is correct
9 Correct 464 ms 205688 KB Output is correct
10 Correct 326 ms 156788 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 445 ms 150648 KB Output is correct
2 Correct 514 ms 135032 KB Output is correct
3 Correct 419 ms 146424 KB Output is correct
4 Correct 480 ms 113912 KB Output is correct
5 Correct 406 ms 158584 KB Output is correct
6 Correct 377 ms 150648 KB Output is correct
7 Correct 395 ms 159356 KB Output is correct
8 Correct 483 ms 86392 KB Output is correct
9 Correct 516 ms 138232 KB Output is correct
10 Correct 340 ms 155640 KB Output is correct