Submission #480287

#TimeUsernameProblemLanguageResultExecution timeMemory
480287FEDIKUSMeteors (POI11_met)C++17
100 / 100
2091 ms65536 KiB
#include <bits/stdc++.h> #define mp make_pair #define pb push_back #define pf push_front #define popb pop_back #define popf pop_front #define xx first #define yy second #define ff(i,s,f) for(int i=s;i<f;i++) #define fb(i,s,f) for(int i=(s)-1;i>=f;i--) #define ffi(i,s,f) for(int i=s;i<=f;i++) #define fbi(i,s,f) for(int i=s;i>=f;i--) #define srt(a) sort(a.begin(),a.end()); #define srtg(a,int) sort(a.begin(),a.end(),greater<int>()) #define lb(a,x) lower_bound(a.begin(),a.end(),x) #define ub(a,x) upper_bound(a.begin(),a.end(),x) #define fnd(a,x) find(a.begin(),a.end(),x) #define vstart auto startt=chrono::system_clock::now() #define vend auto endd=chrono::system_clock::now() #define vvreme chrono::duration<double> vremee=endd-startt #define ios ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0) using namespace std; typedef long long ll; typedef pair<int,int> pii; typedef pair<int,int> pint; typedef string str; const int maxn=3e5+10; vector<int> s[maxn],buckets[maxn]; int p[maxn],res[maxn],l[maxn],r[maxn]; ll bit[maxn]; int lb[maxn],rb[maxn],incr[maxn]; int n,m; void add(int x,int k){ for(;x<=m;x+=x&-x) bit[x]+=k; } ll query(int x){ ll ret=0; for(;x>0;x-=x&-x) ret+=bit[x]; return ret; } void solve(){ cin>>n>>m; ffi(i,1,m){ int a; cin>>a; s[a].pb(i); } ffi(i,1,n) cin>>p[i]; int k; cin>>k; ffi(i,1,k) cin>>lb[i]>>rb[i]>>incr[i]; ffi(i,1,n){ l[i]=1; r[i]=k; res[i]=-1; } bool change=true; while(true){ change=false; ffi(i,1,k) buckets[i].clear(); ffi(i,1,n){ if(l[i]<=r[i]){ change=true; buckets[(l[i]+r[i])/2].pb(i); } } if(!change) break; fill(bit,bit+maxn,0); ffi(i,1,k){ if(lb[i]<=rb[i]){ add(lb[i],incr[i]); add(rb[i]+1,-incr[i]); }else{ add(1,incr[i]); add(rb[i]+1,-incr[i]); add(lb[i],incr[i]); } for(int j:buckets[i]){ ll tren=0; for(int t:s[j]){ tren+=query(t); if(tren>=p[j]) break; } if(tren>=p[j]){ res[j]=i; r[j]=i-1; }else l[j]=i+1; } } } ffi(i,1,n) if(res[i]!=-1) cout<<res[i]<<"\n"; else cout<<"NIE\n"; } int main(){ ios; int t=1; //cin>>t; while(t--) solve(); 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...