제출 #974550

#제출 시각아이디문제언어결과실행 시간메모리
974550rahidilbayramliArranging Shoes (IOI19_shoes)C++17
50 / 100
256 ms281080 KiB
#include "shoes.h" #include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> #define ll long long #define ld long double #define vl vector<ll> #define vi vector<int> #define pii pair<int, int> #define pll pair<ll, ll> #define all(v) v.begin(), v.end() #define pb push_back #define f first #define s second using namespace std; using namespace __gnu_pbds; typedef tree<pll, null_type, less<pll>, rb_tree_tag, tree_order_statistics_node_update> ordered_set; const ll sz = 1e5+5; queue<ll> st1[sz], st2[sz]; int segtree[4*sz], lazy[4*sz]; void push(ll v, ll l, ll r) { if(lazy[v] != 0) { segtree[v] += (r - l + 1) * lazy[v]; if(l != r) { lazy[2*v] += lazy[v]; lazy[2*v+1] += lazy[v]; } lazy[v] = 0; } } void update(ll v, ll l, ll r, ll tl, ll tr, ll val) { push(v, l, r); if(l > r || l > tr || r < tl) return; if(tl <= l && r <= tr) { segtree[v] += (r - l + 1) * val; if(l != r) { lazy[2*v] += val; lazy[2*v+1] += val; } return; } else { ll mid = (l + r) / 2; update(2*v, l, mid, tl, min(mid, tr), val); update(2*v+1, mid+1, r, max(mid+1, tl), tr, val); segtree[v] = segtree[2*v] + segtree[2*v+1]; } } ll findsum(ll v, ll l, ll r, ll tl, ll tr) { if(l > r || l > tr || r < tl) return 0; push(v, l, r); if(tl <= l && r <= tr) return segtree[v]; else { ll mid = (l + r) / 2; ll lans, rans; lans = findsum(2*v, l, mid, tl, min(mid, tr)); rans = findsum(2*v+1, mid+1, r, max(mid+1, tl), tr); return lans + rans; } } long long count_swaps(vector<int> s) { ll ans = 0, i, n = s.size(); for(i = 0; i < s.size(); i++) { if(s[i] > 0) { if(st1[s[i]].size() == 0) st2[s[i]].push(i); else { ll f = st1[s[i]].front(); st1[s[i]].pop(); update(1, 1, n, f+1, i-1, 1); ll sum = findsum(1, 1, n, f, f); ans += (i - f - 1); ans -= sum; } } else { if(st2[-s[i]].size() == 0) st1[-s[i]].push(i); else { ll f = st2[-s[i]].front(); st2[-s[i]].pop(); update(1, 1, n, f+1, i-1, 1); ll sum = findsum(1, 1, n, f, f); ans += (i - f); ans -= sum; } } } return ans; }

컴파일 시 표준 에러 (stderr) 메시지

shoes.cpp: In function 'long long int count_swaps(std::vector<int>)':
shoes.cpp:75:15: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   75 |  for(i = 0; i < s.size(); i++)
      |             ~~^~~~~~~~~~
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...