求助,能过样例,过讨论区的数据,但是0pts
查看原帖
求助,能过样例,过讨论区的数据,但是0pts
692274
hgckythgcfhk楼主2023/12/4 13:55
#include<bits/stdc++.h>
using namespace std;const unsigned N=3e5+1;
#define void inline void
#define int register unsigned
#define vint vector<unsigned>
#define cit const int
unsigned ans[N],t[N],L[N],R[N],c[N],b[N],n;vint a[N];
void ins(int x,int y){for(;x<=n;x+=x&-x)t[x]+=y;}
void add(int x){cit l=L[x],r=R[x];ins(l,c[x]),ins(r+1,-c[x]);if(l>r)ins(1,c[x]);}
void del(int x){cit l=L[x],r=R[x];ins(l,-c[x]),ins(r+1,c[x]);if(l>r)ins(1,-c[x]);}
inline unsigned qry(int x){int s=0;for(;x;x-=x&-x)s+=t[x];return s;}
#define pb emplace_back
inline bool chk(int id){int s=0;for(int i:a[id])s+=qry(i);return s>=b[id];}
void add(int st,int ed){for(int i=st;i<=ed;++i)add(i);}
void del(int st,int ed){for(int i=st;i<=ed;++i)del(i);}
void solve(vint v,cit l,cit r){if(l==r){for(int i:v)ans[i]=l;return;}
cit m=l+r>>1;add(l,m);vint vl,vr;for(int i:v)chk(i)?vl.pb(i):vr.pb(i);
del(l,m);if(vl.size())solve(vl,l,m);add(l,m);if(vr.size())solve(vr,m+1,r);}
signed main(){ios::sync_with_stdio(0);int m,k;cin>>m>>n;vint v;
	for(int i=1;i<=n;++i)cin>>k,a[k].pb(i);
	for(int i=1;i<=m;++i)cin>>b[i],v.pb(i);cin>>k;
	for(int i=1;i<=k;++i)cin>>L[i]>>R[i]>>c[i];solve(v,1,k+1);
	for(int i=1;i<=m;++i)ans[i]==k+1?cout<<"NIE":cout<<ans[i],cout<<'\n';
}
2023/12/4 13:55
加载中...