Submission details
Task:Lisäykset
Sender:Yytsi
Submission time:2025-11-29 11:04:17 +0200
Language:C++ (C++20)
Status:READY
Result:100
Feedback
groupverdictscore
#1ACCEPTED20
#2ACCEPTED33
#3ACCEPTED47
Test results
testverdicttimegroup
#1ACCEPTED0.00 s1, 2, 3details
#2ACCEPTED0.00 s1, 2, 3details
#3ACCEPTED0.01 s1, 3details
#4ACCEPTED0.00 s1, 3details
#5ACCEPTED0.00 s1, 3details
#6ACCEPTED0.10 s2, 3details
#7ACCEPTED0.09 s3details
#8ACCEPTED0.10 s3details
#9ACCEPTED0.10 s3details
#10ACCEPTED0.10 s3details
#11ACCEPTED0.10 s3details

Code

#pragma GCC target("avx2,bmi,bmi2,popcnt,lzcnt")
#include <bits/stdc++.h>
using namespace std;
using ll = long long;

#define N 101010
int fen[N];

void add(int k, int x) {
  for (; k <= N; fen[k] += x, k += k & -k);
}
 
int upto(int k) {
  int s = 0;
  for (; k >= 1; s += fen[k], k -= k & -k);
  return s;
}

int n, m;



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

  int p = 0;
  for (int i = 1; i <= n; i++) {
    int x; cin>>x;

    add(i, x - p);
    p = x;
  }

  for (int qi = 0; qi < m; qi++) {
    int k; cin>>k;

    // bin search endpoints
    // 1 2 2 2 3 5 5 5
    //   ^   ^
    int enp = upto(k);
    int a = 1, b = k+1;
    while (a < b) {
      int mid = a + (b - a) / 2;
      if (upto(mid) == enp) b = mid;
      else a = mid + 1;
    }

    int left_end = a;

    int l = k, r = n+1;
    while (l < r) {
      int mid = l + (r - l) / 2;
      if (upto(mid) != enp) r = mid;
      else l = mid + 1;
    }

    int right_end = l-1;

    int dist = k - left_end;
    
    add(1, 1);
    add(left_end, -1);
    add(right_end - dist, 1);
    add(right_end+1, -1);
  }

  for (int i = 1; i <= n; i++) {
    cout << upto(i) << " ";
  }
  cout<<"\n";
}

Test details

Test 1

Group: 1, 2, 3

Verdict: ACCEPTED

input
1 1000
0
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

correct output
1000 

user output
1000 

Test 2

Group: 1, 2, 3

Verdict: ACCEPTED

input
1000 1000
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...

correct output
511 511 511 511 511 511 511 51...

user output
511 511 511 511 511 511 511 51...

Test 3

Group: 1, 3

Verdict: ACCEPTED

input
1000 1000
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...

correct output
495 495 495 495 495 495 495 49...

user output
495 495 495 495 495 495 495 49...

Test 4

Group: 1, 3

Verdict: ACCEPTED

input
1000 1000
0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 ...

correct output
562 562 562 562 562 562 562 56...

user output
562 562 562 562 562 562 562 56...

Test 5

Group: 1, 3

Verdict: ACCEPTED

input
1000 1000
0 1 3 4 6 9 9 9 10 11 11 11 11...

correct output
997 997 997 997 997 998 998 99...

user output
997 997 997 997 997 998 998 99...

Test 6

Group: 2, 3

Verdict: ACCEPTED

input
100000 100000
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...

correct output
50033 50033 50033 50033 50033 ...

user output
50033 50033 50033 50033 50033 ...

Test 7

Group: 3

Verdict: ACCEPTED

input
100000 100000
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...

correct output
49996 49996 49996 49996 49996 ...

user output
49996 49996 49996 49996 49996 ...

Test 8

Group: 3

Verdict: ACCEPTED

input
100000 100000
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...

correct output
50057 50057 50057 50057 50057 ...

user output
50057 50057 50057 50057 50057 ...

Test 9

Group: 3

Verdict: ACCEPTED

input
100000 100000
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...

correct output
50536 50536 50536 50536 50536 ...

user output
50536 50536 50536 50536 50536 ...

Test 10

Group: 3

Verdict: ACCEPTED

input
100000 100000
0 4 7 29 33 44 52 75 77 79 82 ...

correct output
100000 100001 100003 100023 10...

user output
100000 100001 100003 100023 10...

Test 11

Group: 3

Verdict: ACCEPTED

input
100000 100000
1 12 14 16 49 59 59 63 68 73 8...

correct output
100001 100010 100012 100014 10...

user output
100001 100010 100012 100014 10...