Submission #285638

#TimeUsernameProblemLanguageResultExecution timeMemory
285638evpipisSails (IOI07_sails)C++11
100 / 100
98 ms5880 KiB
#include <bits/stdc++.h> using namespace std; #define fi first #define se second #define mp make_pair typedef long long ll; typedef pair<int, int> ii; const int len = 1e5+5, mx = 1e5; int tree[len]; ii arr[len]; multiset<int> mys; void add(int i, int v){ while (i <= mx) tree[i] += v, i += i&(-i); } int ask(int i){ int ans = 0; while (i > 0) ans += tree[i], i -= i&(-i); return ans; } void print(){ printf("tree now:\n"); for (int i = 1; i <= 5; i++) printf("%d ", ask(i)); printf("\n"); printf("multiset now:\n"); for (auto cur: mys) printf("%d ", cur); printf("\n"); } void upd(int a, int b){ //printf("upd: a = %d, b = %d\n", a, b); if (a > 1) mys.erase(mys.find(a)); mys.insert(b+1); add(a, +1); add(b+1, -1); } int main(){ int n; scanf("%d", &n); for (int i = 0; i < n; i++) scanf("%d %d", &arr[i].fi, &arr[i].se); sort(arr, arr+n); mys.insert(1); for (int i = 0; i < n; i++){ int h = arr[i].fi, s = arr[i].se; int st = h-s+1, rem = s; auto it = mys.lower_bound(st); int cur = -1, pre = -1; if (it != mys.end()) cur = *it; if (it == mys.end() || *it > st) pre = *(--it); if (cur != -1) rem -= (h-cur+1), upd(cur, h); //printf("rem = %d\n", rem); if (pre != -1){ upd(pre, pre+rem-1); } //printf("i = %d, h = %d, s = %d\n", i, h, s); //print(); } ll ans = 0; for (int i = 1; i <= mx; i++){ int temp = ask(i); ans += temp*1LL*(temp-1); } printf("%lld\n", ans/2LL); return 0; }

Compilation message (stderr)

sails.cpp: In function 'int main()':
sails.cpp:51:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   51 |     scanf("%d", &n);
      |     ~~~~~^~~~~~~~~~
sails.cpp:53:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   53 |         scanf("%d %d", &arr[i].fi, &arr[i].se);
      |         ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#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...