# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1105075 | VinhLuu | Remittance (JOI19_remittance) | C++17 | 2 ms | 6648 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
//#define int long long
#define ll long long
using namespace std;
const int N = 1e6 + 5;
const int oo = 1e9;
int c[N], n, a[N], b[N];
bool f[N];
int st[N << 1];
void update(int i){
i += n - 1;
while(i > 1){
i /= 2;
if(c[st[i << 1]] >= c[st[i << 1|1]]) st[i] = st[i << 1];
else st[i] = st[i << 1|1];
}
}
signed main(){
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define task "v"
if(fopen(task ".inp","r")){
freopen(task ".inp","r",stdin);
freopen(task ".out","w",stdout);
}
cin >> n;
for(int i = 1; i <= n; i ++){
cin >> a[i] >> b[i];
c[i] = a[i] - b[i];
st[i + n - 1] = i;
}
for(int i = n - 1; i >= 1; i --){
if(c[st[i << 1]] >= c[st[i << 1|1]]) st[i] = st[i << 1];
else st[i] = st[i << 1|1];
}
while(true){
if(c[st[1]] <= 1) break;
// cerr << st[1] << " " << c[st[1]] << " k\n";
int nx = (st[1] == n ? 1 : st[1] + 1);
int val = c[st[1]] / 2;
c[nx] += val;
c[st[1]] -= val * 2;
update(nx);
update(st[1]);
}
bool ff = true, gg = true;
for(int i = 1; i <= n; i ++){
if(c[i] < 0){
cout << "No\n";
return 0;
}
if(c[i] != 0) ff = false;
if(c[i] + b[i] > 1) gg = false;
}
if(ff){
cout << "Yes\n";
return 0;
}
if(!gg){
cout << "Yes\n";
}else cout << "No\n";
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |