제출 #1158468

#제출 시각아이디문제언어결과실행 시간메모리
1158468zhasynHorses (IOI15_horses)C++20
0 / 100
25 ms12624 KiB
#include <bits/stdc++.h> #include "horses.h" #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> #define pb push_back #define pf push_front using namespace std; using namespace __gnu_pbds; #define F first #define S second typedef long long ll; #define pii pair <int, int> #define pll pair <ll, ll> typedef long double ld; const ll N = 1e5 + 100, M = 2 * 1e6 + 100, len = 21, inf = 1e18; const ll mod = 1e9 + 7; ll um(ll a, ll b){ return (1LL * a * b) % mod; } ll subr(ll a, ll b){ return ((1LL * a - b) % mod + mod) % mod; } typedef tree<int,null_type,less_equal<int>,rb_tree_tag,tree_order_statistics_node_update>o_set; int init(int n, int x[], int p[]) { vector <pll> vec; for(int i = 0; i < n; i++){ while((ll)vec.size() != 0){ pll v = vec.back(); if(p[i] > v.F){ x[i] = um(x[i], v.S); vec.pop_back(); }else break; } vec.pb({p[i], x[i]}); } ll ans = 0; for(int i = 0; i < (int)vec.size() - 1; i++){ if(vec[i].F > vec[i + 1].F * vec[i + 1].S){ ans += um(vec[i].F, vec[i].S - 1); ans %= mod; } else vec[i + 1].S = um(vec[i + 1].S, vec[i].S); } int last = (int)vec.size() - 1; ans += um(vec[last].F, vec[last].S); ans %= mod; return ans; } int updateX(int pos, int val) { return 0; } int updateY(int pos, int val) { 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...