Submission #978112

#TimeUsernameProblemLanguageResultExecution timeMemory
978112vjudge1Deda (COCI17_deda)C++17
140 / 140
813 ms7896 KiB
#include <bits/stdc++.h> //#include <ext/pb_ds/assoc_container.hpp> // Common file //#include <ext/pb_ds/tree_policy.hpp> // Including // tree_order_statistics_node_update #include //<ext/pb_ds/detail/standard_policies.hpp> #define S second #define F first #define vll vector<ll> #define pll pair<ll, ll> #define mll vector<vll> #define sll set<ll> #define vstring vector<string> #define rep(x, g, y) for (ll x = g; x < y; x++) #define rrep(x, g, y) for (ll x = g; x >= y; x--) #define all(a) (a).begin(), (a).end() using namespace std; // using namespace __gnu_pbds; // using namespace __gnu_cxx; typedef long long ll; typedef long double ld; typedef unsigned long long ull; // CRAM DEJA DE VER MIS ENVIOS MALDITO // SUPER SET // typedef tree<int, null_type, less<int>, rb_tree_tag, // tree_order_statistics_node_update> ordered_set; // SUPER MULTISET // typedef tree<long long, null_type, less_equal<>, rb_tree_tag, // tree_order_statistics_node_update> indexed_multiset; // USOS // imprimer la cantidad de elementos escritamente menor a X // cout << aux.order_of_key(x)<<"\n"; // imprime el elemento k-esimo mas grande(comenzando desde 0) // cout<<*X.find_by_order(K)<<endl; // TIP: lower y upper invertidos en multiset. // ll mod=1e9+7; // ll expo(ll a, ll b) // { // if(a==0) return b==0; // ll ans=1; // while (b) // { // if(b&1) ans=(ans*a)%mod; // b>>=1LL; // a=(a*a)%mod; // } // return ans; // } ll lcm(ll a, ll b) { return (a * b) / __gcd(a, b); } void yes() { cout << "YES\n"; } void no() { cout << "NO\n"; } template <class T> void print_v(vector<T> &v) { cout << "{"; for (auto x : v) cout << x << ","; cout << "\b}\n"; } void update(vll &st, ll l, ll r, ll nd, ll pos, ll valor) { ll mid = (l + r) / 2; if (l == r) { st[nd] = valor; return; } if (pos <= mid) update(st, l, mid, nd * 2, pos, valor); else update(st, mid + 1, r, nd * 2 + 1, pos, valor); st[nd] = min(st[nd * 2], st[nd * 2 + 1]); } ll query(vll &st, ll l, ll r, ll nd, ll lq, ll rq) { if(lq<=l && r<=rq) return st[nd]; if(r<lq || l>rq) return 1e12; ll mid=(l+r)/2; return min(query(st, l, mid, nd*2,lq,rq), query(st,mid+1,r,nd*2+1,lq,rq)); } void solve() { ll n, q; cin >> n >> q; vll st(4*n,1e12); while (q--) { char x; cin >> x; ll a, b; cin >> a >> b; if (x == 'M') { update(st, 0, n - 1, 1, --b, a); } else { ll inicio=--b; ll fin=n-1; ll ans=-2; while(inicio<=fin) { ll mid=(inicio+fin)/2; if(query(st, 0, n-1, 1, b,mid)<=a) { ans=mid; fin=mid-1; } else inicio=mid+1; } cout << ans+1<<"\n"; } //print_v(st); } } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); // ll t; cin >> t; // while(t--) solve(); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...