제출 #808027

#제출 시각아이디문제언어결과실행 시간메모리
808027mindiyak자리 배치 (IOI18_seats)C++14
0 / 100
4059 ms35504 KiB
#include "seats.h" #include <iostream> using namespace std; const int MX = 1e6+5; vector<int> pos(MX); int n = 0; vector<int> rmin(MX,0); vector<int> rmax(MX,0); vector<long long> temp_ans(MX,0); void give_initial_chart(int H, int W, std::vector<int> R, std::vector<int> C) { n = W; for(int i=0;i<W;i++)pos[i] = R[i]; rmin[0]=rmax[0]=pos[0]; for(int i=1;i<n;i++){ rmin[i] = min(rmin[i-1],pos[i]); rmax[i] = max(rmax[i-1],pos[i]); } long long ans = 0; for(int i=0;i<n;i++){ int box_size = (rmax[i]-rmin[i]+1); // cout << "{" << rmin[i] << "," << rmax[i] << "} {" << cmin[i] << "," << cmax[i] << "} " << box_size << " " << i+1 << endl; if(i+1 == box_size){ ans++; temp_ans[i] = ans; } } } int swap_seats(int a, int b) { swap(pos[a],pos[b]); long long ans = 0; if(a==0){ rmin[0]=rmax[0]=pos[0]; }else{ ans = temp_ans[a-1]; } for(int i=max(a,1);i<=b;i++){ rmin[i] = min(rmin[i-1],pos[i]); rmax[i] = max(rmax[i-1],pos[i]); } // cout << endl; int change = -temp_ans[b]; for(int i=a;i<n;i++){ int box_size = (rmax[i]-rmin[i]+1); // cout << "{" << rmin[i] << "," << rmax[i] << "} {" << cmin[i] << "," << cmax[i] << "} " << box_size << " " << i+1 << endl; if(i+1 == box_size){ ans++; change ++; temp_ans[i] = ans; } }for(int i=b+1;i<n;i++)temp_ans[i]+=change; // cout << " ans = " << ans << endl << endl; return temp_ans[n-1]; }
#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...