Submission #37131

#TimeUsernameProblemLanguageResultExecution timeMemory
37131Weak123456금 캐기 (IZhO14_divide)C++14
0 / 100
0 ms6480 KiB
#include <bits/stdc++.h> #define ii pair <int, int> #define x first #define y second #define db(x) cerr << #x << " = " << x << endl; #define _ << ", " << using namespace std; inline void read(int &x){register int c = getchar();x = 0; int neg = 0;for (;((c<48 || c>57) && c != '-') ;c = getchar());if(c=='-') {neg=1;c=getchar();}for(;c>47 && c<58;c = getchar()) {x = (x<<1) + (x<<3) + c - 48;}if(neg) x=-x;} inline void read(long long &x){register int c = getchar();x = 0; int neg = 0;for (;((c<48 || c>57) && c != '-') ;c = getchar());if(c=='-') {neg=1;c=getchar();}for(;c>47 && c<58;c = getchar()) {x = (x<<1) + (x<<3) + c - 48;}if(neg) x=-x;} inline void writeln(long long x){char buffor[21];register int i=0;int neg=0; if (x<0) {neg=1; x= -x;}do{buffor[i++]=(x%10)+'0';x/=10;} while(x);i--;if (neg) putchar('-');while(i>=0) putchar(buffor[i--]);putchar('\n');} inline void write(long long x){char buffor[21];register int i=0;int neg=0; if (x<0) {neg=1; x= -x;}do{buffor[i++]=(x%10)+'0';x/=10;} while(x);i--;if (neg) putchar('-');while(i>=0) putchar(buffor[i--]);putchar(' ');} const int N = 1e5 + 7; const long long oo = 1e18 + 7; int n, g; long long e[N], gg[N]; map <long long, int> mp; vector <long long> v; struct mine{ int x, gold, energy; }a[N]; struct BIT{ long long tree[2 * N]; inline void Init(){ for (int i = 1; i < 2 * N; i++) tree[i] = oo; } void Update(int x, long long val){ for (; x <= g; x += (x & (-x))) tree[x] = min(tree[x], val); } long long Query(int x){ long long res = oo; for (; x > 0; x -= (x & (-x))) res = min(res, tree[x]); return res; } }BIT; int main(){ ios_base::sync_with_stdio(false); cin.tie(nullptr); freopen("divide.in", "r", stdin); freopen("divide.out", "w", stdout); read(n); for (int i = 1; i <= n; i++){ read(a[i].x); read(a[i].gold); read(a[i].energy); e[i] = e[i - 1] + a[i].energy; gg[i] = gg[i - 1] + a[i].gold; v.push_back(e[i - 1] - a[i].x); v.push_back(e[i] - a[i].x); } v.push_back(0); sort(v.begin(), v.end()); mp[v[0]] = g = 1; for (int i = 1; i < v.size(); i++) if (v[i] != v[i - 1]) mp[v[i]] = ++g; BIT.Init(); long long res = 0; for (int i = 1; i <= n; i++) res = max(res, (long long)a[i].gold); for (int i = 1; i <= n; i++){ // cout << e[i] - a[i].x << ' ' << e[i - 1] - a[i].x << endl; int x = mp[e[i] - a[i].x]; int pos = mp[e[i - 1] - a[i].x]; long long cur = BIT.Query(x); // db(x _ pos _ cur _ gg[i]); res = max(res, gg[i] - cur); BIT.Update(pos, gg[i - 1]); } writeln(res); }

Compilation message (stderr)

divide.cpp: In function 'int main()':
divide.cpp:64:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for (int i = 1; i < v.size(); i++)
                    ^
divide.cpp:51:34: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)', declared with attribute warn_unused_result [-Wunused-result]
  freopen("divide.in", "r", stdin);
                                  ^
divide.cpp:52:36: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)', declared with attribute warn_unused_result [-Wunused-result]
  freopen("divide.out", "w", stdout);
                                    ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...