제출 #655138

#제출 시각아이디문제언어결과실행 시간메모리
655138snpmrnhlol새로운 문제 (POI11_met)C++17
100 / 100
2084 ms43396 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...