Submission #118550

# Submission time Handle Problem Language Result Execution time Memory
118550 2019-06-19T07:59:41 Z Plurm Crayfish scrivener (IOI12_scrivener) C++11
100 / 100
526 ms 154944 KB
#include <vector>
using namespace std;
const int MXN = 1 << 20;
const int COEFF = 18;
char mem[COEFF*MXN];
int llink[COEFF*MXN];
int rlink[COEFF*MXN];
int root;
int nodesz;
vector<int> rootlist;
vector<int> lens;
inline int newnode(int o = -1){
    int c = ++nodesz;
    if(o != -1){
        llink[c] = llink[o];
        rlink[c] = rlink[o];
        mem[c] = mem[o];
    }
    return c;
}
inline int build(int l, int r){
    int c = newnode();
    if(l == r) return c;
    int k = (l+r)/2;
    llink[c] = build(l,k);
    rlink[c] = build(k+1,r);
    return c;
}
inline int update(int o, int idx, char upd, int lb, int rb){
    int nr = newnode(o);
    int b = nr;
    while(lb != rb){
        int k = (lb + rb)/2;
        if(idx <= k){
            rb = k;
            llink[nr] = newnode(llink[nr]);
            nr = llink[nr];
        }else{
            lb = k+1;
            rlink[nr] = newnode(rlink[nr]);
            nr = rlink[nr];
        }
    }
    mem[nr] = upd;
    return b;
}
inline char query(int c, int idx, int lb, int rb){
    while(lb != rb){
        int k = (lb + rb)/2;
        if(idx <= k){
            rb = k;
            c = llink[c];
        }else{
            lb = k+1;
            c = rlink[c];
        }
    }
    return mem[c];
}
void Init() {
    root = build(0, MXN-1);
    rootlist.push_back(root);
    lens.push_back(0);
}
void TypeLetter(char L) {
    int l = lens.back();
    int o = rootlist.back();
    int c = update(o, l, L, 0, MXN-1);
    rootlist.push_back(c);
    lens.push_back(l+1);
}
void UndoCommands(int U) {
    int vn = rootlist.size() - 1 - U;
    lens.push_back(lens[vn]);
    rootlist.push_back(rootlist[vn]);
}
char GetLetter(int P) {
    return query(rootlist.back(), P, 0, MXN-1);
}
# Verdict Execution time Memory Grader output
1 Correct 19 ms 16768 KB Output is correct
2 Correct 19 ms 16752 KB Output is correct
3 Correct 18 ms 16768 KB Output is correct
4 Correct 18 ms 16768 KB Output is correct
5 Correct 18 ms 16768 KB Output is correct
6 Correct 18 ms 16768 KB Output is correct
7 Correct 18 ms 16760 KB Output is correct
8 Correct 19 ms 16768 KB Output is correct
9 Correct 19 ms 16768 KB Output is correct
10 Correct 19 ms 16768 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 19 ms 16768 KB Output is correct
2 Correct 18 ms 16768 KB Output is correct
3 Correct 18 ms 16768 KB Output is correct
4 Correct 20 ms 16768 KB Output is correct
5 Correct 19 ms 16892 KB Output is correct
6 Correct 20 ms 16768 KB Output is correct
7 Correct 20 ms 16760 KB Output is correct
8 Correct 19 ms 16768 KB Output is correct
9 Correct 20 ms 16760 KB Output is correct
10 Correct 19 ms 16760 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 19 ms 17108 KB Output is correct
2 Correct 20 ms 17152 KB Output is correct
3 Correct 20 ms 17152 KB Output is correct
4 Correct 21 ms 17408 KB Output is correct
5 Correct 21 ms 17152 KB Output is correct
6 Correct 21 ms 17536 KB Output is correct
7 Correct 21 ms 17408 KB Output is correct
8 Correct 19 ms 17280 KB Output is correct
9 Correct 20 ms 17408 KB Output is correct
10 Correct 26 ms 17152 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 339 ms 129788 KB Output is correct
2 Correct 368 ms 141888 KB Output is correct
3 Correct 350 ms 139260 KB Output is correct
4 Correct 388 ms 113732 KB Output is correct
5 Correct 426 ms 123016 KB Output is correct
6 Correct 331 ms 152180 KB Output is correct
7 Correct 450 ms 81392 KB Output is correct
8 Correct 385 ms 115924 KB Output is correct
9 Correct 391 ms 154944 KB Output is correct
10 Correct 245 ms 118252 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 418 ms 112968 KB Output is correct
2 Correct 513 ms 100864 KB Output is correct
3 Correct 380 ms 110028 KB Output is correct
4 Correct 423 ms 85320 KB Output is correct
5 Correct 318 ms 119220 KB Output is correct
6 Correct 308 ms 113216 KB Output is correct
7 Correct 329 ms 119604 KB Output is correct
8 Correct 463 ms 64492 KB Output is correct
9 Correct 526 ms 103548 KB Output is correct
10 Correct 248 ms 116836 KB Output is correct