답안 #660125

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
660125 2022-11-20T12:19:28 Z beepbeepsheep Meteors (POI11_met) C++17
0 / 100
1093 ms 45932 KB
#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==1) memset(fen,0,sizeof(fen)),curr=1; //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 Incorrect 5 ms 7508 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 6 ms 7508 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 74 ms 11996 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 124 ms 12576 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 101 ms 11956 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 135 ms 12024 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1093 ms 45932 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 970 ms 44812 KB Output isn't correct
2 Halted 0 ms 0 KB -