제출 #114281

#제출 시각아이디문제언어결과실행 시간메모리
114281popovicirobertSails (IOI07_sails)C++14
50 / 100
1073 ms1996 KiB
#include <bits/stdc++.h> #define lsb(x) (x & (-x)) #define ll long long #define ull unsigned long long // 217 // 44 using namespace std; const int MAXH = (int) 1e5; int main() { //ifstream cin("A.in"); //ofstream cout("A.out"); int i, n; ios::sync_with_stdio(false); cin.tie(0), cout.tie(0); cin >> n; vector <int> h(n + 1), k(n + 1), ord(n + 1); for(i = 1; i <= n; i++) { cin >> h[i] >> k[i]; ord[i] = i; } sort(next(ord.begin()), ord.end(), [&](const int &a, const int &b) { return h[a] < h[b]; }); vector <int> cnt(MAXH + 1); for(i = 1; i <= n; i++) { int val = cnt[h[ord[i]] - k[ord[i]] + 1]; int pos = h[ord[i]]; while(cnt[pos] != val) { k[ord[i]]--; cnt[pos--]++; } int res = 0; for(int step = 1 << 16; step; step >>= 1) { if(res + step <= MAXH && cnt[res + step] > val) { res += step; } } while(k[ord[i]]--) { cnt[++res]++; } } ll ans = 0; for(i = 1; i <= MAXH; i++) { ans += 1LL * cnt[i] * (cnt[i] - 1) / 2; } cout << ans; //cin.close(); //cout.close(); 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...
#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...