官方题解
A - Contest Start
答案
#include <iostream>
#include <algorithm>
#include<bits/stdc++.h>
#define ll long long
#define mem(a,b) memset(a,b,sizeof a)
#define ull unsigned long long
#define INF 0x3f3f3f3f3f3f3f3f
#define inf 0x3f3f3f3f
#define rep(i,a,b) for(auto i=a;i<=b;++i)
#define bep(i,a,b) for(auto i=a;i>=b;--i)
#define lowbit(x) x&(-x)
#define PII pair<int,int>
#define x first
#define y second
#define PLL pair<ll,ll>
#define PI acos(-1)
#define pb push_back
#define eb emplace_back
const double eps = 1e-6;
const int mod = 998244353;
const int MOD = 1e9 + 7;
const int N = 2e5 + 10;
const int M = 111;
int dx[]={-1, 0, 1, 0};
int dy[]={0, 1, 0, -1};
using namespace std;
inline void solve(){
for(int i=1;i<=5;i++) i++;
ll n,x,k;
cin>>n>>x>>k;
string s,ssss,sssss;
if(x>k){
cout<<"0"<<endl;
return ;
}
int kkkkkkkkk;
ll p=k/x;
if(n<=p){
ll res=(n-1)*n/2;
cout<<res<<endl;
return ;
}
else{
n-=p;
ll res=n*p;
res+=(p-1)*p/2;
cout<<res<<endl;
return ;
}
for(int i=1;i<=5;i++) i++;
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
for(int i=1;i<=5;i++) i++;
int t=1;
cin>>t;
while(t--) solve();
return 0;
}
B - Love Song
答案
#include <bits/stdc++.h>
#include <algorithm>
#include <iostream>
#define ll long long
#define mem(a, b) memset(a, b, sizeof a)
#define ull unsigned long long
#define INF 0x3f3f3f3f3f3f3f3f
#define inf 0x3f3f3f3f
#define rep(i, a, b) for (auto i = a; i <= b; ++i)
#define bep(i, a, b) for (auto i = a; i >= b; --i)
#define lowbit(x) x&(-x)
#define PII pair<int, int>
#define x first
#define y second
#define PLL pair<ll, ll>
#define PI acos(-1)
#define pb push_back
#define eb emplace_back
const double eps = 1e-6;
const int mod = 998244353;
const int MOD = 1e9 + 7;
const int N = 2e5 + 10;
const int M = 111;
int dx[] = {-1, 0, 1, 0};
int dy[] = {0, 1, 0, -1};
using namespace std;
map<int, int> mp;
inline void solve() {
for (int i = 1; i <= 5; i++) i++;
int n, q;
cin >> n >> q;
string s;
cin >> s;
int nnnnnnn = 0;
int kkkkkkkk;
string str = "";
for (int i = 0; i < n; i++) {
int k = s[i] - 'a' + 1;
for (int j = 0; j < k; j++) {
str += s[i];
}
mp[i] = str.size();
}
while (q--) {
int l, r;
cin >> l >> r;
l--, r--;
if (!l)
cout << mp[r] << endl;
else
cout << mp[r] - mp[l - 1] << endl;
}
for (int i = 1; i <= 5; i++) i++;
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int t = 1;
for (int i = 1; i <= 5; i++) i++;
// cin>>t;
while (t--) solve();
return 0;
}
C - Stable Groups
答案
#include <iostream>
#include <algorithm>
#include<bits/stdc++.h>
#define ll long long
#define mem(a,b) memset(a,b,sizeof a)
#define ull unsigned long long
#define INF 0x3f3f3f3f3f3f3f3f
#define inf 0x3f3f3f3f
#define rep(i,a,b) for(auto i=a;i<=b;++i)
#define bep(i,a,b) for(auto i=a;i>=b;--i)
#define lowbit(x) x&(-x)
#define PII pair<int,int>
#define x first
#define y second
#define PLL pair<ll,ll>
#define PI acos(-1)
#define pb push_back
#define eb emplace_back
const double eps = 1e-6;
const int mod = 998244353;
const int MOD = 1e9 + 7;
const int N = 2e5 + 10;
const int M = 111;
int dx[]={-1, 0, 1, 0};
int dy[]={0, 1, 0, -1};
using namespace std;
ll dp[N];
vector<ll>vp;
inline void solve(){
ll n,k,x;
cin>>n>>k>>x;
for(int i=1;i<=n;i++) cin>>dp[i];
sort(dp+1,dp+1+n);
for(int i=2;i<=n;i++){
if(dp[i]-dp[i-1]>x) vp.eb(dp[i]-dp[i-1]);
}
int len=vp.size();
if(!vp.size()){
cout<<"1"<<endl;
return ;
}
sort(vp.begin(),vp.end());
for(int i=0;i<vp.size();i++){
ll p=(vp[i]-1)/x;
if(k>=p) len--,k-=p;
else break;
}
cout<<len+1<<endl;
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int t=1;
//cin>>t;
while(t--) solve();
return 0;
}
D - PriceFixed
答案
#include <iostream>
#include <algorithm>
#include<bits/stdc++.h>
#define ll long long
#define mem(a,b) memset(a,b,sizeof a)
#define ull unsigned long long
#define INF 0x3f3f3f3f3f3f3f3f
#define inf 0x3f3f3f3f
#define rep(i,a,b) for(auto i=a;i<=b;++i)
#define bep(i,a,b) for(auto i=a;i>=b;--i)
#define lowbit(x) x&(-x)
#define PII pair<int,int>
#define x first
#define y second
#define PLL pair<ll,ll>
#define PI acos(-1)
#define pb push_back
#define eb emplace_back
const double eps = 1e-6;
const int mod = 998244353;
const int MOD = 1e9 + 7;
const int N = 2e5 + 10;
const int M = 111;
int dx[]={-1, 0, 1, 0};
int dy[]={0, 1, 0, -1};
using namespace std;
PLL dp[N];
inline void solve(){
for(int i=1;i<=5;i++) i++;
ll n;
cin>>n;
ll res=0;
ll u,v;
for(int i=1;i<=5;i++) i++;
for(int i=1;i<=n;i++){
cin>>u>>v;
dp[i]={v+1,u};
res+=u;
}
sort(dp+1,dp+1+n);
int kkkkkkkk;
for(int i=1;i<=5;i++) i++;
reverse(dp+1,dp+1+n);
ll pos=res;
ll val=0ll;
for(int i=1;i<=5;i++) i++;
int ssssssss=0;
for(int i=1;i<=n;i++){
if(dp[i].x>res) continue;
ll dist=pos-dp[i].x+1;
ll p=dp[i].y;
if(p>=dist){
pos=dp[i].x-1;
val+=dist;
}
else{
pos-=p;
val+=p;
}
}
ll col=(res-val)*2;
cout<<val+col<<endl;
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
for(int i=1;i<=5;i++) i++;
int t=1;
//cin>>t;
while(t--) solve();
return 0;
}
F - Strange Array (补)
答案
#include <iostream>
#include <algorithm>
#include<bits/stdc++.h>
#define ll long long
#define mem(a,b) memset(a,b,sizeof a)
#define ull unsigned long long
#define INF 0x3f3f3f3f3f3f3f3f
#define inf 0x3f3f3f3f
#define rep(i,a,b) for(auto i=a;i<=b;++i)
#define bep(i,a,b) for(auto i=a;i>=b;--i)
#define lowbit(x) x&(-x)
#define PII pair<int,int>
#define x first
#define y second
#define PLL pair<ll,ll>
#define PI acos(-1)
#define pb push_back
#define eb emplace_back
const double eps = 1e-6;
const int mod = 998244353;
const int MOD = 1e9 + 7;
const int N = 2e5 + 10;
const int M = 111;
int dx[]={-1, 0, 1, 0};
int dy[]={0, 1, 0, -1};
using namespace std;
struct segtree{
int mx[N*2];
int mn[N*2];
int lz[N];
int n;
void init(int k){
n=k;
for(int i=0;i<n;i++) mx[i+n]=mn[i+n]=i;
for(int i=n-1;i>0;i--){
mx[i]=max(mx[i<<1],mx[i<<1|1]);
mn[i]=min(mn[i<<1],mn[i<<1|1]);
lz[i]=0;
}
}
void updata(int p,int d){
mx[p]+=d;
mn[p]+=d;
if(p<n) lz[p]+=d;
}
void pull(int p) {
for (;p>1;p>>=1){
mx[p>>1]=max(mx[p],mx[p^1]);
mn[p>>1]=min(mn[p],mn[p^1]);
mn[p>>1]+=lz[p>>1],mx[p>>1]+=lz[p>>1];
}
}
void push(int p) {
for (int h=__lg(n);h>=0;h--) {
int i=p>>h;
if(!lz[i>>1]) continue;
updata(i,lz[i>>1]);
updata(i^1,lz[i>>1]);
lz[i>>1]=0;
}
}
void add(int l,int r,int d) {
int L=l,R=r;
for (l+=n,r+=n;l<r;l>>=1,r>>=1) {
if(l&1) updata(l++,d);
if(r&1) updata(--r,d);
}
pull(L+n);
pull(R-1+n);
}
int Qmin(int l,int r) {
int res=inf;
push(l+n);
push(r-1+n);
for (l+=n, r+=n;l<r;l>>=1,r>>=1) {
if(l&1) res=min(res,mn[l++]);
if(r&1) res=min(res,mn[--r]);
}
return res;
}
int Qmax(int l, int r) {
int res=-inf;
push(l+n);
push(r-1+n);
for (l+=n,r+=n;l<r;l>>=1,r>>= 1) {
if(l&1) res=max(res,mx[l++]);
if(r&1) res=max(res,mx[--r]);
}
return res;
}
};
segtree seg;
map<int,vector<int>>mp;
inline void solve(){
int n;
cin>>n;
vector<int>dp(n);
for(int i=0;i<n;i++){
cin>>dp[i];
mp[dp[i]].eb(i+1);
}
seg.init(n+1);
vector<int>A(n+1);
vector<int>B(n+1);
for(auto it:mp){
auto idx=it.y;
for(auto i:idx) A[i]=max({A[i],seg.Qmax(i,n+1)-seg.Qmin(0,i),seg.Qmax(0,i)-seg.Qmin(i,n+1)});
for(auto i:idx) seg.add(i,n+1,-2);
for(auto i:idx) B[i]=max({B[i],seg.Qmax(i,n+1)-seg.Qmin(0,i),seg.Qmax(0,i)-seg.Qmin(i,n+1)});
}
for(int i=1;i<=n;i++) cout<<max(A[i]/2,(B[i]-1)/2)<<" ";
cout<<endl;
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int t=1;
//cin>>t;
while(t--) solve();
return 0;
}