제출 #117335

#제출 시각아이디문제언어결과실행 시간메모리
117335rajarshi_basu크레이피쉬 글쓰는 기계 (IOI12_scrivener)C++14
34 / 100
721 ms262144 KiB
#include <iostream> #include <vector> #include <set> #include <iomanip> #include <algorithm> #include <functional> #include <stdio.h> #include <cmath> #include <queue> #include <string> #include <map> #include <fstream> #include <complex> #include <stack> #include <set> #define FOR(i,n) for(int i=0;i<n;i++) #define FORE(i,a,b) for(int i=a;i<=b;i++) #define ll long long int #define vi vector<int> #define ii pair<int,int> #define pb push_back #define mp make_pair #define ff first #define ss second #define pll pair<ll,ll> #define cd complex<double> #define ld long double #define pld pair<ld,ld> #define iii pair<ii,int> using namespace std; const ll INF = 1e9+10; const int MAXN = 10000*100+10; struct Node{ Node* left,*right; int val; Node(int v){ left = right = NULL; val = v; } Node(Node* l,Node* r,int v){ left = l; right = r; val = v; } }; Node* versions[MAXN]; int len[MAXN]; inline void expand(Node* node){ if(node->left == NULL)node->left = new Node(0); if(node->right == NULL)node->right = new Node(0); } Node* update(Node* node,int ss,int se,int i,int val){ expand(node); if(ss > i or se < i)return node; if(ss == se){ return new Node(node->left,node->right,node->val + val); }else{ int mid = (ss+se)/2; auto l = update(node->left,ss,mid,i,val); auto r = update(node->right,mid+1,se,i,val); return new Node(l,r,0); } } int get(Node* node,int ss,int se,int i){ expand(node); if(ss > i or se < i)return -1; if(ss==se)return node->val; int mid=(ss+se)/2; return max(get(node->left,ss,mid,i),get(node->right,mid+1,se,i)); } int PTR = 0; void Init(){ versions[0] = new Node(0); len[0] = 0; } void TypeLetter(char a){ PTR++; versions[PTR] = update(versions[PTR-1],0,MAXN,len[PTR-1],a); len[PTR] = len[PTR-1]+1; } void UndoCommands(int x){ PTR++; versions[PTR] = versions[PTR-x-1]; len[PTR] = len[PTR-x-1]; } char GetLetter(int p){ return get(versions[PTR],0,MAXN,p); } /* int main(){ Init(); TypeLetter('a'); TypeLetter('b'); cout << GetLetter(1) << endl; TypeLetter('d'); UndoCommands(2); UndoCommands(1); cout << GetLetter(2) << endl; TypeLetter('e'); UndoCommands(1); UndoCommands(5); TypeLetter('c'); cout << GetLetter(2) << endl; UndoCommands(2); cout << GetLetter(2) << endl; return 0; } */
#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...