이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll v[300000],v2[300000],l[300000],r[300000];
ll v3[300000],v4[300000],v5[300000];
vector <ll> v7[300000];
struct event{
int t,id;
}v6[300000];
bool cmp(event a,event b){
return a.t < b.t;
}
class fenwick{
ll fen[300001];
public:
ll query(ll pos){
pos++;
ll r = 0;
for(ll i = pos;i > 0;i-=(i&-i))r+=fen[i];
//cout<<"query:"<<pos - 1<<",result:"<<r<<'\n';
return r;
}
void add(ll pos,ll nr){
//cout<<"added:"<<pos<<','<<nr<<'\n';
pos++;
for(ll i = pos;i <= 300000;i+=(i&-i))fen[i]+=nr;
}
void empt(){
for(ll i = 0;i <= 300000;i++)fen[i] = 0;
//cout<<"emptied\n";
}
};
fenwick fen;
bool calc(ll nr,ll nr2){
ll r = 0;
for(auto i:v7[nr]){
//cout<<i<<' '<<fen.query(i)<<'\n';
r+=fen.query(i);
if(r >= nr2)return 1;
}
return 0;
}
int main(){
ll n,m,i,q,j,cnt = 0;
cin>>n>>m;
for(i = 0;i < m;i++)cin>>v[i],v[i]--,v7[v[i]].push_back(i);;
for(i = 0;i < n;i++){
cin>>v2[i];
}
cin>>q;
for(i = 0;i < q;i++){
cin>>v3[i]>>v4[i]>>v5[i];
v3[i]--;
v4[i]--;
}
for(i = 0;i < n;i++)l[i] = 0,r[i] = q;
for(i = 0;i < 20;i++){
fen.empt();
cnt = 0;
for(j = 0;j < n;j++){
if(l[j] != r[j]){
v6[cnt++] = {(l[j] + r[j])/2,j};
}
}
sort(v6,v6 + cnt,cmp);
ll p1 = 0;
///simulate
for(j = 0;j < q;j++){
//cout<<"adding query:"<<j<<',';
if(v3[j] <= v4[j]){
fen.add(v3[j],v5[j]);
fen.add(v4[j] + 1,-v5[j]);
}else{
swap(v3[j],v4[j]);
fen.add(0,v5[j]);
fen.add(v3[j] + 1,-v5[j]);
fen.add(v4[j],v5[j]);
swap(v3[j],v4[j]);
}
while(p1 < cnt && v6[p1].t == j){
if(calc(v6[p1].id,v2[v6[p1].id])){
r[v6[p1].id] = j;
}else{
l[v6[p1].id] = j + 1;
}
p1++;
}
}
}
for(i = 0;i < n;i++){
if(l[i] == q)cout<<"NIE";
else cout<<l[i] + 1;
cout<<'\n';
}
return 0;
}
/**
3 5
1 3 2 1 3
8 1 8
3
4 2 4
1 3 1
3 5 2
**/
컴파일 시 표준 에러 (stderr) 메시지
met.cpp: In function 'int main()':
met.cpp:62:43: warning: narrowing conversion of '((l[j] + r[j]) / 2)' from 'll' {aka 'long long int'} to 'int' [-Wnarrowing]
62 | v6[cnt++] = {(l[j] + r[j])/2,j};
| ~~~~~~~~~~~~~^~
met.cpp:62:46: warning: narrowing conversion of 'j' from 'll' {aka 'long long int'} to 'int' [-Wnarrowing]
62 | v6[cnt++] = {(l[j] + r[j])/2,j};
| ^
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |