#include <iostream>
#include <bits/stdc++.h>
#include <cmath>
#include <algorithm>
#include <vector>
#include <deque>
#include <set>
#include <stack>
#include <string>
#include <map>
#include <queue>
//#define int long long
#pragma GCC optimization("g", on)
#pragma GCC optimize ("inline")
#pragma GCC optimization("03")
#pragma GCC optimization("unroll-loops")
#pragma comment(linker, "/stack:200000000")
#pragma GCC optimize("Ofast")
using namespace std;
const long long oo = 1000000000000000000;
long long sum, ans = 0, mx = 0, mn = 1000000000, num, pos;
/*
ViHHiPuh
(( `'-""``""-'` ))
)-__-_.._-__-(
/ --- (o _ o) --- \
\ .-* ( .0. ) *-. /
_'-. ,_ '=' _, .-'_
/ `;#'#'# - #'#'#;` \
\_)) -----'#'----- ((_/
# --------- #
'# ------- ------ #'
/..-'# ------- #'-.\
_\...-\'# -- #'/-.../_
((____)- '#' -(____))
cout << fixed << setprecision(6) << x;
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
freopen ( "sum.in", "r", stdin )
*/
vector <int> vv[ 300002 ];
vector <int> v[ 300002 ];
int L[ 300002 ], R[ 300002 ];
int an[ 300002 ];
int t[ 1200002 ], p[ 1200002 ];
void pus( int v ) {
if ( p[ v ] ) {
p[ v + v ] += p[ v ];
p[ v + v + 1 ] += p[ v ];
t[ v + v ] += p[ v ];
t[ v + v + 1 ] += p[ v ];
p[ v ] = 0;
}
}
void gett( int v, int tl, int tr, int pos ) {
if ( tl > pos || tr < pos )
return;
if ( tl == tr ) {
num += t[ v ];
return;
}
pus( v );
int mid = ( tl + tr ) / 2;
if ( mid >= pos )
gett( v + v, tl, mid, pos );
if ( mid + 1 <= pos )
gett( v + v + 1, mid + 1, tr, pos );
}
void upd( int v, int tl, int tr, int l, int r ) {
if ( tl > r || tr < l )
return;
if ( tl >= l && tr <= r ) {
t[ v ] += num;
p[ v ] += num;
return;
}
pus( v );
int mid = ( tl + tr ) / 2;
if ( mid >= l )
upd( v + v, tl, mid, l, r );
if ( mid + 1 <= r )
upd( v + v + 1, mid + 1, tr, l, r );
}
main () {
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int n, m;
cin >> n >> m;
int a[ m + 1 ];
for ( int i = 1; i <= m; i ++ ) {
cin >> a[ i ];
vv[ a[ i ] ].push_back( i );
}
int b[ n + 1 ];
for ( int i = 1; i <= n; i ++ ) {
cin >> b[ i ];
}
int q;
cin >> q;
int l[ q + 1 ], r[ q + 1 ], x[ q + 1 ];
for ( int i = 1; i <= q; i ++ ) {
cin >> l[ i ] >> r[ i ] >> x[ i ];
}
for ( int i = 1; i <= n; i ++ )
L[ i ] = 1, R[ i ] = q + 1;
ans = 1;
int mid;
while ( ans ) {
ans = 0;
for ( int j = 1; j <= q; j ++ )
v[ j ].clear();
for ( int i = 1; i <= n; i ++ ) {
// cout << i << " - " << L[ i ] << " " << R[ i ] << "\n";
if ( L[ i ] == R[ i ] )
continue;
mid = ( L[ i ] + R[ i ] ) / 2;
v[ mid ].push_back( i );
ans = 1;
}
for ( int j = 1; j <= q; j ++ ) {
num = x[ j ];
if ( l[ j ] <= r[ j ] )
upd( 1, 1, m, l[ j ], r[ j ] );
else
upd( 1, 1, m, 1, r[ j ] ), upd( 1, 1, m, l[ j ], m );
if ( v[ j ].size() == 0 )
continue;
for ( auto i : v[ j ] ) {
num = 0;
for ( auto pos : vv[ i ] ) {
gett( 1, 1, m, pos );
if ( num >= b[ i ] ) {
break;
}
}
// cout << i << " - " << num << "\n";
if ( num >= b[ i ] )
R[ i ] = j;
else
L[ i ] = j + 1;
}
}
for ( int j = 1; j <= q; j ++ ) {
num = -x[ j ];
if ( l[ j ] <= r[ j ] )
upd( 1, 1, m, l[ j ], r[ j ] );
else
upd( 1, 1, m, 1, r[ j ] ), upd( 1, 1, m, l[ j ], m );
}
}
for ( int i = 1; i <= n; i ++ ) {
if ( L[ i ] <= q )
cout << L[ i ] << "\n";
else
cout << "NIE\n";
}
}
Compilation message
met.cpp:13: warning: ignoring '#pragma GCC optimization' [-Wunknown-pragmas]
13 | #pragma GCC optimization("g", on)
|
met.cpp:15: warning: ignoring '#pragma GCC optimization' [-Wunknown-pragmas]
15 | #pragma GCC optimization("03")
|
met.cpp:16: warning: ignoring '#pragma GCC optimization' [-Wunknown-pragmas]
16 | #pragma GCC optimization("unroll-loops")
|
met.cpp:17: warning: ignoring '#pragma comment ' [-Wunknown-pragmas]
17 | #pragma comment(linker, "/stack:200000000")
|
met.cpp:99:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
99 | main () {
| ^~~~
met.cpp: In function 'int main()':
met.cpp:125:6: warning: this 'for' clause does not guard... [-Wmisleading-indentation]
125 | for ( int j = 1; j <= q; j ++ )
| ^~~
met.cpp:127:3: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'for'
127 | for ( int i = 1; i <= n; i ++ ) {
| ^~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
11 ms |
14412 KB |
Output is correct |
2 |
Correct |
13 ms |
14412 KB |
Output is correct |
3 |
Correct |
13 ms |
14412 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
12 ms |
14412 KB |
Output is correct |
2 |
Correct |
12 ms |
14492 KB |
Output is correct |
3 |
Correct |
13 ms |
14436 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
508 ms |
16972 KB |
Output is correct |
2 |
Correct |
659 ms |
18860 KB |
Output is correct |
3 |
Correct |
614 ms |
18884 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
595 ms |
18048 KB |
Output is correct |
2 |
Correct |
600 ms |
18044 KB |
Output is correct |
3 |
Correct |
616 ms |
19112 KB |
Output is correct |
4 |
Correct |
88 ms |
17396 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
276 ms |
17460 KB |
Output is correct |
2 |
Correct |
329 ms |
19524 KB |
Output is correct |
3 |
Correct |
307 ms |
15036 KB |
Output is correct |
4 |
Correct |
618 ms |
19020 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
593 ms |
16552 KB |
Output is correct |
2 |
Correct |
483 ms |
18116 KB |
Output is correct |
3 |
Correct |
547 ms |
16856 KB |
Output is correct |
4 |
Correct |
662 ms |
20280 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Execution timed out |
6029 ms |
40280 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Execution timed out |
6018 ms |
38772 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |