This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
#define Tree int h,int l,int r
#define Left 2*h,l,(l+r)/2
#define Right 2*h+1,(l+r)/2,r
#define F first
#define S second
using namespace std;
const int N=300005;
long long n,m,q;
long long b[N],x[N];
int ANS[N];
int L[N],R[N],M[N];
int l[N],r[N],a[N];
vector < int > V[N];
vector < pair < int , int > > H;
long long G[N];
void Upd(int idx,long long delta)
{
while (idx<=N+1) { G[idx]+=delta; idx+=(idx & -idx); }
}
long long Get(int idx)
{
long long res=0;
while (idx>0) { res+=G[idx]; idx-=(idx & -idx); }
return res;
}
main ()
{
ios::sync_with_stdio(false);
cin>>n>>m;
for (int i=1; i<=m; i++)
{
cin>>a[i];
V[a[i]].push_back(i);
}
for (int i=1; i<=n; i++)
cin>>b[i];
cin>>q;
for (int i=1; i<=q; i++)
cin>>l[i]>>r[i]>>x[i];
for (int i=1; i<=n; i++)
L[i]=1,R[i]=q;
for (int i=1; i<=30; i++)
{
H.clear();
for (int j=1; j<=n; j++)
{
M[j]=(L[j]+R[j])/2;
H.push_back({M[j],j});
}
sort(H.begin(),H.end());
int Q=0;
for (int j=0; j<=N-3; j++)
G[j]=0;
for (int j=0; j<H.size(); j++)
{
if (R[H[j].S]<L[H[j].S]) continue;
while (Q+1<=H[j].F)
{
Q++;
if (l[Q]>r[Q])
{
Upd(1,x[Q]); Upd(r[Q]+1,-x[Q]);
Upd(l[Q],x[Q]); Upd(m+1,-x[Q]);
}
else
{
Upd(l[Q],x[Q]);
Upd(r[Q]+1,-x[Q]);
}
}
long long int res=0;
for (int k=0; k<V[H[j].S].size(); k++)
{
res+=Get(V[H[j].S][k]);
if (res>1e9) res=1e10;
}
if (res>=b[H[j].S]) R[H[j].S]=M[H[j].S]-1,ANS[H[j].S]=H[j].F;
else L[H[j].S]=M[H[j].S]+1;
}
}
for (int i=1; i<=n; i++)
if (!ANS[i]) cout<<"NIE"<<endl;
else cout<<ANS[i]<<endl;
}
Compilation message (stderr)
met.cpp:39:7: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
main ()
^
met.cpp: In function 'int main()':
met.cpp:79:24: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for (int j=0; j<H.size(); j++)
~^~~~~~~~~
met.cpp:101:28: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for (int k=0; k<V[H[j].S].size(); k++)
~^~~~~~~~~~~~~~~~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |