Submission #91416

#TimeUsernameProblemLanguageResultExecution timeMemory
91416emil_physmathSimple game (IZhO17_game)C++14
22 / 100
1081 ms3228 KiB
#include <iostream> #include <stdio.h> #include <algorithm> #include <vector> using namespace std; pair<int, int> h[100005]; char state[100005], temp[100005]; void SolveOne(int n, int m); int BruteForce(char * l, char * r); int main() { int n, m; cin>>n>>m; for (int i=0; i<n; i++) { cin>>h[i].first; h[i].second=i; } if (/*n*m<=70000000*/ n<=1000 && m<=1000) { SolveOne(n, m); return 0; } vector<pair<int, int>> q; for (int t=0; t<m; t++) { int temp, H; cin>>temp>>H; q.push_back(make_pair(H, t)); } sort(q.begin(), q.end()); int ans=0; for (int i=0; i<n; i++) { temp[i]=state[i]=(h[i].first<q[0].first?'<':'>'); if (i && state[i]!=state[i-1]) ans++; } cout<<ans<<'\n'; sort(h, h+n); int lessFrom=0; for (int t=1; t<q.size(); t++) { vector<int> curChange; while (lessFrom<n) { if (h[lessFrom].first>q[t].first) break; int curLessInd=h[lessFrom].second; if (state[curLessInd]=='>') curChange.push_back(curLessInd); lessFrom++; } sort(curChange.begin(), curChange.end()); for (int i=0; i<curChange.size(); i++) temp[curChange[i]]='<'; int l=0, r=0; while (l<curChange.size()) { while (r+1<curChange.size() && curChange[r+1]==curChange[r]+1) r++; ans+=BruteForce(l?temp+l-1:temp+l, r+1<n?temp+r+1:temp+r)- BruteForce(l?state+l-1:state+l, r+1<n?state+r+1:state+r); l=r+1; } for (int i=0; i<curChange.size(); i++) state[curChange[i]]='<'; printf("%d\n", ans); } char I; cin >> I; return 0; } /* 4 2 3 4 1 6 2 2 2 5 */ int BruteForce(char * l, char * r) { int ans=0; l++; while (l<=r) { if (*l!=*(l-1)) ans++; l++; } return ans; } void SolveOne(int n, int m) { while (m--) { int type; cin>>type; if (type==1) { int pos, val; cin>>pos>>val; h[pos-1].first=val; } else { int H, ans=0; cin>>H; char curState='0'; for (int i=0; i<n; i++) if (h[i].first<H) { if (curState=='>') ans++; curState='<'; } else { if (curState=='<') ans++; curState='>'; } cout<<ans<<'\n'; } } }

Compilation message (stderr)

game.cpp: In function 'int main()':
game.cpp:45:17: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for (int t=1; t<q.size(); t++)
                ~^~~~~~~~~
game.cpp:57:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for (int i=0; i<curChange.size(); i++)
                 ~^~~~~~~~~~~~~~~~~
game.cpp:60:11: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   while (l<curChange.size())
          ~^~~~~~~~~~~~~~~~~
game.cpp:62:14: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
    while (r+1<curChange.size() && curChange[r+1]==curChange[r]+1)
           ~~~^~~~~~~~~~~~~~~~~
game.cpp:68:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for (int i=0; i<curChange.size(); i++)
                 ~^~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...