ooo-- +-0 (Rank 51) 1640->1653
Round 3 と同時開催の Div2。
日本の上位陣スゲェと思いながらsystem testを見てた。
int main() { int N; cin>>N; vector<PII> st(100010); vector<pair<PII, int> > ans(100010); int ansp=0; int anscount=0; int stp=0; REP(i, N) { int v; cin>>v; int push_pos=i; while(stp>0 && st[stp-1].second > v) { push_pos = st[stp-1].first; //cout<<"push_pos "<<push_pos<<endl; int prevH = max(v, stp-1>0 ? st[stp-2].second : 0); ans[ansp++] = MP(MP(st[stp-1].first+1, i), st[stp-1].second - prevH); anscount += st[stp-1].second - prevH; stp--; } if(stp==0) { if(v>0) st[stp++] = MP(push_pos, v); } else if(st[stp-1].second < v) { st[stp++] = MP(push_pos, v); } //REP(m, stp) cout<<st[m]<<" "; cout<<endl; } while(stp>0) { int prevH = stp-1>0 ? st[stp-2].second : 0; ans[ansp++] = MP(MP(st[stp-1].first+1, N), st[stp-1].second-prevH); anscount += st[stp-1].second-prevH; stp--; } cout<<anscount<<endl; REP(i, ansp) { REP(j, ans[i].second) { cout<<ans[i].first.first<<" "<<ans[i].first.second<<endl; } } return 0; }