제출 #642511

#제출 시각아이디문제언어결과실행 시간메모리
642511red24Izbori (COCI22_izbori)C++14
40 / 110
3051 ms21264 KiB
#include <bits/stdc++.h> using namespace std; #define vi vector<int> #define vvi vector<vector<int>> #define pi pair<int, int> #define ppi pair<pair<int, int>> #define rep(i, a, b) for (int i = a; i <= b; i++) #define OK cout << "OK" << '\n' #define qi queue<int> #define sti stack<int> #define si stack<int> #define yes cout << "Yes" << '\n' #define no cout << "No" << '\n' #define pb push_back #define eb emplace_back #define vpi vector<pair<int, int>> #define ll long long #define nl cout << '\n' #define ok cout << "OK" << '\n' #define mp make_pair #define repr(i, b, a) for (int i = b; i >= a; i--) #define veb vector<bool> #define vveb vector<vector<bool>> #define int long long void printvec(vi v) { rep(i, 1, v.size()-1) cout << v[i] << ' '; nl; } long long binpow(long long a, long long b) { long long res = 1; while (b > 0) { if (b & 1) res = res * a; a = a * a; b >>= 1; } return res; } long long binpowmod(long long a, long long b, long long m) { a %= m; long long res = 1; while (b > 0) { if (b & 1) res = res * a % m; a = a * a % m; b >>= 1; } return res; } void compress(vi &a) { int n = a.size() - 1; vpi pairs(n+1); rep(i, 1, n) pairs[i] = mp(a[i],i); sort(pairs.begin(), pairs.end()); int c = 1; rep(i, 1, n) { if (pairs[i].first > pairs[i-1].first && i > 1) c++; a[pairs[i].second] = c; } return; } // PROGRAM const int MOD = (int)1e9 + 7; void build(int v, int l, int r, vi &a, vi &seg, vi &seg_val) { // cout << v << " " << l << ' ' << r << endl; if (l == r) { return; } int mid = (l + r)/2; build(v<<1, l, mid, a, seg, seg_val); build((v<<1) + 1, mid + 1, r, a, seg, seg_val); vi vec; rep(i, l - 1, mid - 1) vec.pb(a[i]); sort(vec.begin(), vec.end()); int curr_res = 0; rep(i, mid + 1, r) { auto it = lower_bound(vec.begin(), vec.end(), a[i]); curr_res += it - vec.begin(); } seg_val[v] = curr_res + seg_val[v<<1] + seg_val[(v<<1)+1]; } void solve() { // CHECK IF PROGRAM HAS TESTCASES int n; cin >> n; vi a(n+1); rep(i, 1, n) cin >> a[i]; compress(a); int mx = -1; rep(i, 1, n) mx = max(mx, a[i]); int res = 0; rep(c, 1, mx) { vi b(n+1); rep(i, 1, n) { if (a[i] == c) b[i] = 1; else b[i] = 0; } vi pf(n+1); rep(i, 1, n) pf[i] = pf[i-1] + b[i]; rep(i, 1, n) b[i] = 2*pf[i] - i; vi seg_val(4*n+10); vi seg(4*n+10); build(1, 1, n, b, seg, seg_val); res += seg_val[1] + pf[n]; } cout << res << '\n'; } int32_t main() { //fastio ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); //fastio int T = 1; //cin >> T; while (T--) solve(); }

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

Main.cpp: In function 'void printvec(std::vector<long long int>)':
Main.cpp:8:40: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
    8 | #define rep(i, a, b) for (int i = a; i <= b; i++)
......
   29 |  rep(i, 1, v.size()-1) cout << v[i] << ' '; nl;
      |      ~~~~~~~~~~~~~~~~                   
Main.cpp:29:2: note: in expansion of macro 'rep'
   29 |  rep(i, 1, v.size()-1) cout << v[i] << ' '; nl;
      |  ^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...