Submission #605625

#TimeUsernameProblemLanguageResultExecution timeMemory
6056251neMeteors (POI11_met)C++14
100 / 100
1516 ms65536 KiB
#include <bits/stdc++.h> using namespace std; struct node{ long long l,r,v; }; const int maxn = 300005; long long tree[maxn]; int m; void update(int x, long long val){ while(x<=m){ tree[x]+=val; x+=(x&-x); } } long long read(int x){ long long s=0; while(x>0){ s+=tree[x]; x-=(x&-x); } return s; } int main(){ ios_base::sync_with_stdio(false); cin.tie(0); int n;cin>>n>>m; vector<vector<int>>arr(n); for (int i = 0;i<m;++i){ int x;cin>>x; arr[x - 1].push_back(i); } vector<long long>brr(n); for (int i = 0;i<n;++i)cin>>brr[i]; int k;cin>>k; vector<node>edge(k); for (int i = 0;i<k;++i){ cin>>edge[i].l>>edge[i].r>>edge[i].v; edge[i].l--; edge[i].r--; } queue<node>q; vector<int>l(n),r(n); for (int i = 0;i<n;++i){ l[i] = 0,r[i] = k; } vector<int>ans(n,-1); bool changed = true; vector<vector<int>>need(k + 1); for (int i = 0;i<n;++i){ int mid = (l[i] + r[i])>>1; if (l[i] >= r[i]){ ans[i] = l[i]; } else{ need[mid].push_back(i); } } while(changed){ changed = false; for (int i = 0;i<=m;++i)tree[i] = 0; for (int i = 0;i<k;++i){ if (edge[i].l<=edge[i].r){ update(edge[i].l + 1,edge[i].v),update(edge[i].r + 2,-edge[i].v); } else{ update(1,edge[i].v); update(edge[i].r + 2,-edge[i].v); update(edge[i].l + 1,edge[i].v); } while(!need[i].empty()){ int x = need[i].back(); need[i].pop_back(); changed = true; long long sum = 0; for (auto y:arr[x]){ sum+=read(y + 1); if (sum >= brr[x])break; } if (sum < brr[x]){ l[x] = i + 1; } else{ r[x] = i; } if (l[x] >= r[x]){ ans[x] = l[x]; } else{ need[(l[x] + r[x])>>1].push_back(x); } } } } for (auto x:ans){ x++; if (x > k)cout<<"NIE\n"; else cout<<x<<'\n'; } 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...