이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#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';
}
}
}
컴파일 시 표준 에러 (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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |