답안 #257909

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
257909 2020-08-05T04:08:22 Z Autoratch Meteors (POI11_met) C++14
74 / 100
1384 ms 45776 KB
#include <bits/stdc++.h>
using namespace std;

const int N = 1 << 19;

int n,m,q;
int bl[N],need[N];
vector<int> wh[N];
int l[N],r[N];
vector<int> ask[N];
vector<tuple<int,int,int> > inp;
long long fw[N];

void update(int idx,long long val){ while(idx<N) fw[idx]+=val,idx+=(idx & -idx); }

long long read(int idx){ if(idx==0) return 0; long long val = 0; while(idx>0) val+=fw[idx],idx-=(idx & -idx); return val; }

int main()
{
    ios_base::sync_with_stdio(0); cin.tie(0);

    cin >> n >> m;
    for(int i = 1;i <= m;i++) cin >> bl[i],wh[bl[i]].push_back(i);
    for(int i = 1;i <= n;i++) cin >> need[i];
    cin >> q;
    for(int i = 1;i <= q;i++)
    {
        int l,r,k;
        cin >> l >> r >> k;
        inp.push_back({l,r,k});
    }
    for(int i = 1;i <= n;i++) l[i] = 1,r[i] = q;
    while(true)
    {
        bool done = true;
        for(int i = 1;i <= n;i++) if(l[i]!=r[i]) done = false,ask[(l[i]+r[i])/2].push_back(i);
        if(done) break;
        for(int i = 1;i <= m;i++) fw[i] = 0;
        for(int i = 1;i <= q;i++)
        {
            auto [ll,rr,k] = inp[i-1];
            if(ll<=rr) update(ll,k),update(rr+1,-k);
            else update(1,k),update(rr+1,-k),update(ll,k);
            for(int x : ask[i]) 
            {
                long long tmp = 0;
                for(int y : wh[x]) tmp+=read(y);
                int m = (l[x]+r[x])/2;
                if(tmp>=need[x]) r[x] = m;
                else l[x] = m+1;
            }
            ask[i].clear();
        }
    }
    for(int i = 1;i <= n;i++)
    {
        if(l[i]==q)
        {
            long long tmp = 0;
            for(int x : wh[i]) tmp+=read(x);
            if(tmp<need[i]) l[i] = -1;
        }
    }
    for(int i = 1;i <= n;i++) if(l[i]!=-1) cout << l[i] << '\n'; else cout << "NIE\n";
}

Compilation message

met.cpp: In function 'int main()':
met.cpp:41:18: warning: decomposition declaration only available with -std=c++1z or -std=gnu++1z
             auto [ll,rr,k] = inp[i-1];
                  ^
# 결과 실행 시간 메모리 Grader output
1 Correct 18 ms 25088 KB Output is correct
2 Correct 17 ms 25088 KB Output is correct
3 Correct 18 ms 25088 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 18 ms 25088 KB Output is correct
2 Correct 19 ms 25088 KB Output is correct
3 Correct 18 ms 25216 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 93 ms 26992 KB Output is correct
2 Correct 173 ms 28912 KB Output is correct
3 Correct 132 ms 28656 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 133 ms 28144 KB Output is correct
2 Correct 140 ms 28144 KB Output is correct
3 Correct 165 ms 29168 KB Output is correct
4 Correct 49 ms 27384 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 130 ms 27504 KB Output is correct
2 Correct 194 ms 29632 KB Output is correct
3 Correct 134 ms 25980 KB Output is correct
4 Correct 137 ms 29036 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 143 ms 26656 KB Output is correct
2 Correct 162 ms 28148 KB Output is correct
3 Correct 98 ms 26864 KB Output is correct
4 Correct 164 ms 30320 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1143 ms 45776 KB Output is correct
2 Incorrect 1384 ms 34024 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1160 ms 44696 KB Output is correct
2 Incorrect 750 ms 34012 KB Output isn't correct
3 Halted 0 ms 0 KB -