제출 #819018

#제출 시각아이디문제언어결과실행 시간메모리
8190181075508020060209tc새로운 문제 (POI11_met)C++14
74 / 100
586 ms65536 KiB
#pragma GCC optimize("O3,unroll-loops") #pragma GCC target("avx,popcnt,sse4,abm") #include<bits/stdc++.h> using namespace std; #define int __int128 int lowbit(int x){return x&-x;} int bit[500005]; void upd(int pl,int v){ while(pl){ bit[pl]+=v; pl-=lowbit(pl); } } int qsum(int pl){ int ret=0; while(pl<=500000){ ret+=bit[pl]; pl+=lowbit(pl); } return ret; } int m;int n; vector<int>own[500005]; int tgt[500005]; int lar[500005]; int rar[500005]; int opad[500005]; int Q; int ans[500005]; void doop(int l,int r){ for(int i=l;i<=r;i++){ if(lar[i]<=rar[i]){ upd(rar[i],opad[i]); upd(lar[i]-1,-opad[i]); }else{ upd(rar[i],opad[i]); upd(n,opad[i]); upd(lar[i]-1,-opad[i]); } } } void undo(int l,int r){ for(int i=l;i<=r;i++){ if(lar[i]<=rar[i]){ upd(rar[i],-opad[i]); upd(lar[i]-1,opad[i]); }else{ upd(rar[i],-opad[i]); upd(n,-opad[i]); upd(lar[i]-1,opad[i]); } } } void solve(int l,int r,vector<int>qid){ if(l==r){for(int i=0;i<qid.size();i++){ans[qid[i]]=l;}return; } int mi=(l+r)/2; doop(l,mi); vector<int>qa;vector<int>qb; for(int i=0;i<qid.size();i++){ int id=qid[i]; int cal=0; for(int j=0;j<own[id].size();j++){ int pl=own[id][j]; cal+=qsum(pl); if(cal>=tgt[id]){break;} } if(cal>=tgt[id]){ qa.push_back(id); }else{ qb.push_back(id); } } qid.clear(); solve(mi+1,r,qb); undo(l,mi); solve(l,mi,qa); } int read(){ long long ret; cin>>ret; return ret; } signed main(){ //cin>>m>>n; m=read();n=read(); for(int i=1;i<=n;i++){ int v; // cin>>v; v=read(); own[v].push_back(i); } for(int i=1;i<=m;i++){ // cin>>tgt[i]; tgt[i]=read(); } //cin>>Q; Q=read(); for(int i=1;i<=Q;i++){ //cin>>lar[i]>>rar[i]>>opad[i]; lar[i]=read();rar[i]=read();opad[i]=read(); } lar[Q+1]=1; rar[Q+1]=1; opad[Q+1]=0; vector<int>vc; for(int i=1;i<=m;i++){ vc.push_back(i); } solve(1,Q+1,vc); for(int i=1;i<=m;i++){ if(ans[i]==Q+1){ cout<<"NIE\n"; }else{ long long v=ans[i]; cout<<v<<"\n"; } } }
#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...