感觉周赛越来越水了,虽然第三题一开始走了弯路想到树状数组和线段树上去了
A商品种类:很明显考你stl的set
int main(){
IOS;
set<pair<string, string>> s;
int n; cin >> n;
while(n -- ) {
string a, b; cin >> a >> b;
s.insert({a, b});
}
cout << s.size() << endl;
return 0;
}
B字符串:很明显的stack,不知道考过多少次了
int main(){
IOS;
stack<char> stk;
string s; cin >> s;
for (auto x : s) {
if(stk.empty()) stk.push(x);
else if(x == stk.top()) stk.pop();
else stk.push(x);
}
string ans = "";
while(stk.size()) {
ans += stk.top();
stk.pop();
}
reverse(all(ans));
cout << ans << endl;
return 0;
}
C排队:排序一下,因为题目中说的是最远的逆序对的位置。贪心的想,排序后用一个pos记录前缀的最远位置,显然是满足答案的。
PII a[N];
int ans[N];
int main(){
IOS;
int n; cin >> n;
repn(i, 1, n) {
int x; cin >> x;
a[i] = {x, i};
}
sort(a + 1, a + n + 1);
//for (int i = 1; i <= n; i ++ ) cout << a[i].x << endl;
ans[a[1].y] = -1;
int pos = a[1].y;
for (int i = 1; i <= n; i ++ ) {
ans[a[i].y] = -1;
if(pos >= a[i].y) ans[a[i].y] = max(ans[a[i].y], pos - a[i].y - 1);
pos = max(pos, a[i].y);
}
for (int i = 1; i <= n; i ++ ) {
cout << ans[i] << ' ';
}
return 0;
}