제출 #373384

#제출 시각아이디문제언어결과실행 시간메모리
373384Atill83Deda (COCI17_deda)C++14
0 / 140
5 ms620 KiB
#include <bits/stdc++.h> #define ff first #define ss second #define endl '\n' using namespace std; const long long INF = (long long) 1e18; const int mod = (int) 1e9+7; const int MAXN = (int) 2e5+5; typedef long long ll; typedef unsigned long long ull; typedef pair<int,int> pii; typedef pair<ll,ll> pll; int n, q; struct item { int val, pri, ans, binme; item * l, *r; void init(int vl, int bine){ val = vl; binme = bine; ans = bine; pri = (((1LL * rand())<<16)%mod + rand()) % mod; l = NULL, r = NULL; } }; typedef item * pitem; int value(pitem a){ if(a == NULL) return mod; return a->binme; } void calc(pitem a){ a->ans = min({value(a), value(a->l), value(a->r)}); } void split(pitem v, pitem & left, pitem & right, int key){ if(v == NULL){ left = NULL; right = NULL; return; } if(v->val < key){ left = v; split(v->r, v->r, right, key); }else{ right = v; split(v->l, left, v->l, key); } calc(v); } void merge(pitem & v, pitem left, pitem right){ if(left == NULL) v = right; else if(right == NULL) v = left; else if(left->pri > right->pri){ merge(left->r, left->r, right); v = left; }else{ merge(right->l, left, right->l); v = right; } calc(v); } int clc(pitem v, int x){ if(v->l == NULL && v->r == NULL) return v->val; if(v->l != NULL && v->l->ans <= x){ return clc(v->l, x); }else if(v->binme <= x){ return v->val; }else{ return clc(v->r, x); } } int main(){ ios_base::sync_with_stdio(false); cin.tie(nullptr);cout.tie(nullptr); #ifdef Local freopen("C:/Users/Admin/Desktop/Yazilim/C/IO/int.txt","r",stdin); freopen("C:/Users/Admin/Desktop/Yazilim/C/IO/out.txt","w",stdout); #endif cin>>n>>q; pitem root = new item; root->init(n + 1, 0); while(q--){ char ty; cin>>ty; if(ty == 'D'){ int y, b; cin>>y>>b; pitem l, r; split(root, l, r, b); int cev = clc(r, y); cout<<(cev == n + 1 ? -1 : cev)<<endl; merge(root, l, r); }else{ int x, a; cin>>x>>a; pitem v = new item; v->init(a, x); if(a < root->val) merge(root, v, root); else merge(root, root, v); } } #ifdef Local cout<<endl<<fixed<<setprecision(2)<<1000.0 * clock() / CLOCKS_PER_SEC<< " milliseconds "; #endif }
#Verdict Execution timeMemoryGrader output
Fetching results...