제출 #317632

#제출 시각아이디문제언어결과실행 시간메모리
317632Saacoota운세 보기 2 (JOI14_fortune_telling2)C++14
0 / 100
11 ms1528 KiB
#include <bits/stdc++.h> #define fi first #define se second #define ii pair < int , int > #define pb push_back #define eb emplace_back using namespace std; int f[200010][20] , BIT[200010] , c[200010]; ii a[200010]; void upl(int x) { for ( ; x > 0 ; x -= (-x & x)) BIT[x]++; } int dwl(int x) { int tmp = 0; for ( ; x <= 200000 ; x += (-x & x)) tmp += BIT[x]; return tmp; } int get(int l,int r) { int k = __lg(r - l + 1); return max(f[l][k] , f[r - (1 << k) + 1][k]); } int main() { freopen("JOI14.INP","r",stdin); freopen("JOI14.OUT","w",stdout); ios::sync_with_stdio(0); cin.tie(0);cout.tie(0); int n , k; cin >> n >> k; vector < int > vc; vector < ii > cat; for (int i = 1 ; i <= n ; ++i) cin >> a[i].fi >> a[i].se; for (int i = 1 ; i <= k ; ++i) { cin >> c[i]; vc.pb(c[i]); } sort(vc.begin(),vc.end()); for (int i = 1 ; i <= k ; ++i) { c[i] = lower_bound(vc.begin() , vc.end() , c[i]) - vc.begin() + 1; //cout << c[i] - (lower_bound(vc.begin() , vc.end() , c[i]) - vc.begin() + 1) << '\n'; //cout << c[i] << '\n'; f[c[i]][0] = i; } int l = __lg(k); for (int j = 1 ; j <= l ; ++j) for (int i = 1 ; i + (1 << j) - 1 <= k ; ++i) f[i][j] = max(f[i][j - 1] , f[i + (1 << (j - 1))][j - 1]); for (int i = 1 ; i <= n ; ++i) { int l = lower_bound(vc.begin() , vc.end() , min(a[i].fi , a[i].se)) - vc.begin() + 1; int r = lower_bound(vc.begin() , vc.end() , min(a[i].fi , a[i].se)) - vc.begin(); cat.eb(get(l , r) , i); } sort(cat.begin(),cat.end()); int cur = 1; long long ans = 0; for (auto v : cat) { while (cur <= v.fi) upl(c[cur]) , cur++; int ma = max(a[v.se].fi , a[v.se].se); int res = k - (lower_bound(vc.begin() , vc.end() , ma) - vc.begin()); ma = lower_bound(vc.begin() , vc.end() , ma) - vc.begin() + 1; res -= dwl(ma); if (v.fi) ans += ((a[v.se].fi < a[v.se].se) ^ (res & 1) ? a[v.se].se : a[v.se].fi); else ans += (res & 1 ? a[v.se].se : a[v.se].fi); } cout << ans; }

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

fortune_telling2.cpp: In function 'int main()':
fortune_telling2.cpp:31:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)', declared with attribute warn_unused_result [-Wunused-result]
   31 |     freopen("JOI14.INP","r",stdin);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
fortune_telling2.cpp:32:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)', declared with attribute warn_unused_result [-Wunused-result]
   32 |     freopen("JOI14.OUT","w",stdout);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...