Submission #660126

#TimeUsernameProblemLanguageResultExecution timeMemory
660126beepbeepsheepMeteors (POI11_met)C++17
74 / 100
1008 ms37836 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define ld long double typedef pair<ll,ll> ii; const ll inf=1e18; const ll maxn=3e5+5; const ll mod=1e9+7; vector<ll> adj[maxn]; ll arr[maxn]; ll n,e,op,ele,a,b,c; vector<tuple<ll,ll,ll>> v; ll fen[maxn]; void upd(ll x, ll y, ll val){ while (x<maxn){ fen[x]+=val; x+=(x&-x); } y++; while (y<maxn){ fen[y]-=val; y+=(y&-y); } } ll query(ll p){ ll ans=0; while (p){ ans+=fen[p]; p-=(p&-p); } return ans; } ll ans[maxn]; queue<tuple<ll,ll,vector<ll>>> q; ll curr=0; void solve(ll l, ll r, vector<ll> &pple){ if (l==r){ for (auto u:pple) ans[u]=l; return; } if (l==0) memset(fen,0,sizeof(fen)),curr=0; //do a reset ll m=(l+r)/2; for (int i=curr;i<=m;i++){ tie(a,b,c) = v[i]; if (a<=b) upd(a,b,c); else upd(1,b,c),upd(a,e,c); //add all up to m operations } vector<ll> can,cannot; for (auto u:pple){ ll tot=0; for (auto x:adj[u]){ tot+=query(x); } if (tot>=arr[u]) can.emplace_back(u); else cannot.emplace_back(u); } curr=m+1; q.emplace(l,m,can); q.emplace(m+1,r,cannot); } int main(){ ios_base::sync_with_stdio(false); cin.tie(nullptr); cin>>n>>e; vector<ll> pple; for (int i=1;i<=e;i++){ cin>>ele; adj[ele].emplace_back(i); } for (int i=1;i<=n;i++){ cin>>arr[i]; pple.emplace_back(i); } cin>>op; for (int i=1;i<=op;i++){ cin>>a>>b>>c; v.emplace_back(a,b,c); } v.emplace_back(1,n,inf); q.emplace(0,op,pple); while (q.size()){ tie(a,b,pple) = q.front(); q.pop(); solve(a,b,pple); } for (int i=1;i<=n;i++){ if (ans[i]==op) cout<<"NIE"<<endl; else cout<<ans[i]+1<<endl; } 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...