제출 #1008332

#제출 시각아이디문제언어결과실행 시간메모리
1008332DucNguyen2007새로운 문제 (POI11_met)C++14
74 / 100
815 ms38164 KiB
#include<bits/stdc++.h> using namespace std; #define ll long long #define ld long double #define pll pair<ll,ll> #define fi first #define se second const int maxN=3e5+5; const ll inf=2e18; int n,m,a[maxN+1],k,ans[maxN+1]; vector<int> v[maxN+1],pos[maxN+1]; struct query { int l,r; ll x; }q[maxN+1]; struct met { int l,r,mid,b; }p[maxN+1]; struct fenwick { ll bit[maxN+1]; void clr() { memset(bit,0,sizeof(bit)); } void update(int u,ll val) { for(int i=u;i<=m;i+=(i&(-i))) { bit[i]+=val; } } void update_range(int l,int r,ll val) { update(l,val); update(r+1,-val); } ll get(int u) { ll ans=0; for(int i=u;i>0;i-=(i&(-i))) { ans+=bit[i]; } return ans; } }f; int main() { //freopen("","r",stdin); //freopen("","w",stdout); ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>n>>m; for(int i=1;i<=m;i++) { cin>>a[i]; assert(a[i]<=maxN); pos[a[i]].push_back(i); } for(int i=1;i<=n;i++) { cin>>p[i].b; } cin>>k; for(int i=1;i<=k;i++) { cin>>q[i].l>>q[i].r>>q[i].x; assert(q[i].l<=maxN); assert(q[i].r<=maxN); } for(int i=1;i<=n;i++) { p[i].l=1; p[i].r=k; ans[i]=-1; } while(1) { bool ok=false; for(int i=1;i<=n;i++) { if(p[i].l<=p[i].r) { p[i].mid=(p[i].l+p[i].r)/2; ok=true; assert(p[i].mid>=0&&p[i].mid<=maxN); v[p[i].mid].push_back(i); } } if(!ok) { break; } f.clr(); for(int i=1;i<=k;i++) { if(q[i].l>q[i].r) { f.update_range(q[i].l,m,q[i].x); f.update_range(1,q[i].r,q[i].x); } else f.update_range(q[i].l,q[i].r,q[i].x); for(auto j:v[i]) { ll res=0; for(auto id:pos[j]) { res+=f.get(id); } if(res>=p[j].b) { ans[j]=p[j].mid; p[j].r=p[j].mid-1; } else p[j].l=p[j].mid+1; } v[i].clear(); } } for(int i=1;i<=n;i++) { if(p[i].l>k) { cout<<"NIE"; } else { assert(ans[i]>=1&&ans[i]<=k); cout<<p[i].l; } cout<<'\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...