重新振作第11天----日常小记
今天又又又没有振作起来,但是突然发现十二月份全是ddl,既然如此,只能是被迫振作起来了。不然就要寄寄了,真得是离谱哇。一堆的课程大作业,还有课程论文,还有期末复习,还有其他一些事情,感觉再不振作就真毁了。立个flag,明天可以seven起床。
首届CACC监考
有1说1,监考是真的无聊,没有事情干,只能在那里玩玩手机。不过白嫖了一顿汉堡,这个还是挺不错的。这个比赛这次是在我们学校举办,感觉来的人有点少,一共就50+个人报名,来的只有一半左右。这就是万事开头难吗?作为新比赛,确实容易出现这样的情况。希望能越办越好吧!
六级单词+听力磨耳朵
今天背200个单词,然后听听力好吧,感觉得毁了。
退役acmer的每日一题7
题目链接:https://atcoder.jp/contests/abc381/tasks/abc381_e
题目思路:记录位置,对于区间内的'/'进行三分。思路就是这么简单,但是我一直不明白,我这个三分有问题吗????一直wa,然后案例也找不到,人要寄寄了。
最终只能够,不要脸得开大范围,然后在这个范围内遍历。
代码实现:
#include<bits/stdc++.h>
#define int long long
#define endl '\n'
#define ios ios::sync_with_stdio(0);cin.tie(0);cout.tie(0)
using namespace std;
const int N=5e5+10;
const int MAX=1e6+5;
const int mod=1E9+7;
int n,m,k,w;
void solve(){
int n,q;
cin>>n>>q;
string s;
cin>>s;
s=' '+s;
vector<int>a(n+1,0);
vector<int>b(n+1,0);
vector<int>p;
for(int i=1;i<=n;i++){
a[i]+=a[i-1];
b[i]+=b[i-1];
if(s[i]=='1'){
a[i]++;
}
else if(s[i]=='2'){
b[i]++;
}
else {
p.push_back(i);
}
}
while(q--){
int l1,r1;
cin>>l1>>r1;
int l=lower_bound(p.begin(),p.end(),l1)-p.begin();
int r=lower_bound(p.begin(),p.end(),r1)-p.begin();
if(r>=p.size()||p[r]>r1){
r--;
}
int ans=0;
while(r-l>2000){
int mid1=l+(r-l)/3;
int mid2=r-(r-l)/3;
int p1=p[mid1];
int p2=p[mid2];
int ans1,ans2;
ans1=min(a[p1]-a[l1-1],b[r1]-b[p1-1]);
ans2=min(a[p2]-a[l1-1],b[r1]-b[p2-1]);
ans=max(ans1*2+1,ans2*2+1);
if(ans1>ans2){
r=mid2;
}
else {
l=mid1;
}
}
if(l<p.size()&&p[l]<=r1){
for(int i=0;l+i<=r;i++){
ans=max(ans,min(a[p[l+i]]-a[l1-1],b[r1]-b[p[l+i]-1])*2+1);
}
}
cout<<ans<<endl;
}
}
signed main(){
ios;
int t;
t=1;
//cin>>t;
while (t--){
solve();
}
return 0;
}