#include <bits/stdc++.h>
using namespace std;
#define ll long long
typedef pair<ll,ll> ii;
const ll inf=1e18;
const ll maxn=5e5+5;
const ll mod=1e9+7;
vector<ll> adj[maxn];
ll arr[maxn];
ll n,e,op,ele,a,b,c;
vector<tuple<ll,ll,ll>> v;
ll fen[maxn];
void upd(ll x, ll y, ll val){
while (x<maxn){
fen[x]+=val;
x+=(x&-x);
}
y++;
while (y<maxn){
fen[y]-=val;
y+=(y&-y);
}
}
ll query(ll p){
ll ans=0;
while (p){
ans+=fen[p];
p-=(p&-p);
}
return ans;
}
ll ans[maxn];
queue<tuple<ll,ll,vector<ll>>> q;
ll curr=0;
void solve(ll l, ll r, vector<ll> pple){
if (l==r){
for (auto u:pple) ans[u]=l;
return;
}
if (l==0) memset(fen,0,sizeof(fen)),curr=0; //do a reset
ll m=(l+r)/2;
for (int i=curr;i<=m;i++){
tie(a,b,c) = v[i];
if (a<=b) upd(a,b,c);
else upd(1,b,c),upd(a,e,c); //add all up to m operations
}
vector<ll> can,cannot;
for (auto u:pple){
ll tot=0;
for (auto x:adj[u]){
tot+=query(x);
}
if (tot>=arr[u]) can.emplace_back(u);
else cannot.emplace_back(u);
}
curr=m+1;
q.emplace(l,m,can);
q.emplace(m+1,r,cannot);
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cin>>n>>e;
vector<ll> pple;
for (int i=1;i<=e;i++){
cin>>ele;
adj[ele].emplace_back(i);
}
for (int i=1;i<=n;i++){
cin>>arr[i];
pple.emplace_back(i);
}
cin>>op;
for (int i=1;i<=op;i++){
cin>>a>>b>>c;
v.emplace_back(a,b,c);
}
v.emplace_back(1,n,inf);
q.emplace(0,op,pple);
while (q.size()){
tie(a,b,pple) = q.front();
q.pop();
solve(a,b,pple);
}
for (int i=1;i<=n;i++){
if (ans[i]==op) cout<<"NIE"<<endl;
else cout<<ans[i]+1<<endl;
}
return 0;
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
10 ms |
16084 KB |
Output is correct |
2 |
Correct |
11 ms |
16084 KB |
Output is correct |
3 |
Correct |
10 ms |
16096 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
12 ms |
16304 KB |
Output is correct |
2 |
Correct |
12 ms |
16084 KB |
Output is correct |
3 |
Correct |
12 ms |
16084 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
86 ms |
19316 KB |
Output is correct |
2 |
Correct |
195 ms |
20716 KB |
Output is correct |
3 |
Correct |
132 ms |
20080 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
144 ms |
19968 KB |
Output is correct |
2 |
Correct |
139 ms |
19804 KB |
Output is correct |
3 |
Correct |
197 ms |
20392 KB |
Output is correct |
4 |
Correct |
49 ms |
17716 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
129 ms |
19524 KB |
Output is correct |
2 |
Correct |
189 ms |
20860 KB |
Output is correct |
3 |
Correct |
135 ms |
18612 KB |
Output is correct |
4 |
Correct |
144 ms |
20316 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
143 ms |
19092 KB |
Output is correct |
2 |
Correct |
166 ms |
19836 KB |
Output is correct |
3 |
Correct |
84 ms |
19336 KB |
Output is correct |
4 |
Correct |
176 ms |
20816 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1267 ms |
43100 KB |
Output is correct |
2 |
Incorrect |
1258 ms |
36244 KB |
Output isn't correct |
3 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1315 ms |
42268 KB |
Output is correct |
2 |
Incorrect |
738 ms |
36260 KB |
Output isn't correct |
3 |
Halted |
0 ms |
0 KB |
- |