#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define ld long double
typedef pair<ll,ll> ii;
const ll inf=1e18;
const ll maxn=3e5+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 |
7 ms |
9812 KB |
Output is correct |
2 |
Correct |
7 ms |
9824 KB |
Output is correct |
3 |
Correct |
8 ms |
9808 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
7 ms |
9812 KB |
Output is correct |
2 |
Correct |
7 ms |
9824 KB |
Output is correct |
3 |
Correct |
9 ms |
9812 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
81 ms |
13016 KB |
Output is correct |
2 |
Correct |
180 ms |
15512 KB |
Output is correct |
3 |
Correct |
118 ms |
14888 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
132 ms |
13532 KB |
Output is correct |
2 |
Correct |
147 ms |
14624 KB |
Output is correct |
3 |
Correct |
181 ms |
15316 KB |
Output is correct |
4 |
Correct |
48 ms |
11996 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
113 ms |
13272 KB |
Output is correct |
2 |
Correct |
197 ms |
15484 KB |
Output is correct |
3 |
Correct |
122 ms |
12860 KB |
Output is correct |
4 |
Correct |
117 ms |
15184 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
141 ms |
12832 KB |
Output is correct |
2 |
Correct |
169 ms |
14716 KB |
Output is correct |
3 |
Correct |
85 ms |
14052 KB |
Output is correct |
4 |
Correct |
167 ms |
15764 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
999 ms |
36788 KB |
Output is correct |
2 |
Incorrect |
661 ms |
37836 KB |
Output isn't correct |
3 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1008 ms |
36128 KB |
Output is correct |
2 |
Incorrect |
765 ms |
36336 KB |
Output isn't correct |
3 |
Halted |
0 ms |
0 KB |
- |