# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
347688 | IvanJ | Meteors (POI11_met) | C++17 | 221 ms | 31216 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 pb push_back
#define x first
#define y second
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
const int maxn = 3e5 + 5;
int n, m, k;
vector<int> own[maxn];
ll need[maxn];
pair<ii, int> qs[maxn];
vector<pair<ii, int>> A[maxn];
vector<pair<ii, int>> A1[maxn];
int ans[maxn], ok[maxn];
ll fwt[maxn];
void update(int x, int v) {
x++;
for(;x < maxn;x += (x & -x)) fwt[x] += (ll)v;
}
ll query(int x) {
x++;
ll ret = 0;
for(;x > 0;x -= (x & -x)) ret += fwt[x];
return ret;
}
int main() {
scanf("%d %d", &n, &m);
for(int i = 0;i < m;i++) {
int x;scanf("%d", &x);x--;
own[x].pb(i);
}
for(int i = 0;i < n;i++) scanf("%lld", need + i);
scanf("%d", &k);
for(int i = 0;i < k;i++) {
int l, r, a;
scanf("%d %d %d", &l, &r, &a);
l--, r--;
qs[i] = {{l, r}, a};
}
for(int i = 0;i < n;i++) {
int mid = (k - 1) / 2;
A[mid].pb({{0, k - 1}, i});
}
/*while(true) {
for(int i = 0;i < maxn;i++) fwt[i] = 0;
int flag = 0;
for(int i = 0;i < k;i++) {
if(qs[i].x.x > qs[i].x.y) {
update(qs[i].x.x, qs[i].y);
update(0, qs[i].y);
update(qs[i].x.y + 1, -qs[i].y);
} else {
update(qs[i].x.x, qs[i].y);
update(qs[i].x.y + 1, -qs[i].y);
}
for(pair<ii, int> p : A[i]) {
//cout << i << "->" << p.x.x << ' ' << p.x.y << " (" << p.y << ")\n";
if(p.x.x > p.x.y) {continue;}
flag = 1;
ll sum = 0;
for(int j : own[p.y]) sum += query(j);
//cout << sum << "\n";
pair<ii, int> p1 = p;
if(sum < need[p.y]) {
int mid = i + 1 + (p.x.y - i - 1) / 2;
p1.x.x = i + 1;
if(p1.x.x <= p1.x.y && mid >= 0 && mid < k) A1[mid].pb(p1);
}
if(sum >= need[p.y]) {
int mid = p.x.x + (i - 1 - p.x.x) / 2;
p1.x.y = i - 1;
if(p1.x.x <= p1.x.y && mid >= 0 && mid < k) A1[mid].pb(p1);
ans[p.y] = i + 1;
}
}
}
for(int i = 0;i < k;i++) A[i].clear(), A[i] = A1[i], A1[i].clear();
if(!flag) {break;}
}
*/
for(int i = 0;i < n;i++) {
if(!ans[i]) printf("NIE\n"); else printf("%d\n", ans[i]);
}
return 0;
}
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... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |