提出 #60058979
ソースコード 拡げる
#include<bits/stdc++.h>
#define fo(i,l,r) for(int i=l;i<=r;++i)
#define fd(i,r,l) for(int i=r;i>=l;--i)
#define ll long long
#define I inline int
#define V inline void
#define B inline bool
#define L inline ll
#define pi pair<int,int>
#define mk make_pair
#define fi first
#define se second
#define pb push_back
#define vi vector<int>
#define vii vector<pi>
using namespace std;
const int N=1e6+10,mod=998244353;
char St;
I read() {
int x=0,y=1;char c=getchar();
while(c<48||c>57) {if(c==45)y=-y;c=getchar();}
while(c>=48&&c<=57) x=(x<<1)+(x<<3)+(c^48),c=getchar();
return x*y;
}
L ksm(ll x,int y) {ll t(1);for(;y;y>>=1,x=x*x%mod)if(y&1)t=t*x%mod;return t;}
int n,pre[N],suf[N],ans,q,a[N],tr[N<<2];
char c[N];
char Ed;
int main() {
cerr<<"memory:"<<(&St-&Ed)/1024.0<<endl;
n=read();q=read();scanf("%s",c+1);
fo(i,1,n) {
pre[i]=pre[i-1];
if(c[i]=='1') pre[i]=pre[i-1]+1;
}
fd(i,n,1) {
suf[i]=suf[i+1];
if(c[i]=='2') suf[i]=suf[i+1]+1;
}
vi num;
fo(i,1,n) {
if(c[i]=='/') {
num.pb(i);
}
}
while(q--) {
int l=read(),r=read();
int l1=lower_bound(num.begin(),num.end(),l)-num.begin(),r1=upper_bound(num.begin(),num.end(),r)-num.begin();
r1--;
if(l1>r1) {puts("0");continue;}
int le=0,ri=n,ans(0);
while(le<=ri) {
int mid=le+ri>>1;
int _l=l1,_r=r1,_mid,_p(-1),_q(-1);
while(_l<=_r) {
_mid=_l+_r>>1;
if(pre[num[_mid]]-pre[l-1]>=mid) _p=_mid,_r=_mid-1;
else _l=_mid+1;
}
_l=l1,_r=r1;
while(_l<=_r) {
_mid=_l+_r>>1;
if(suf[num[_mid]]-suf[r+1]>=mid) _q=_mid,_l=_mid+1;
else _r=_mid-1;
}
if(_p!=-1&&_q!=-1&&_p<=_q) le=mid+1,ans=mid;
else ri=mid-1;
}
printf("%d\n",ans*2+1);
}
cerr<<"time:"<<clock()<<endl;
return 0;
}
提出情報
コンパイルエラー
Main.cpp: In function ‘int main()’:
Main.cpp:53:35: warning: suggest parentheses around ‘+’ inside ‘>>’ [-Wparentheses]
53 | int mid=le+ri>>1;
| ~~^~~
Main.cpp:56:40: warning: suggest parentheses around ‘+’ inside ‘>>’ [-Wparentheses]
56 | _mid=_l+_r>>1;
| ~~^~~
Main.cpp:62:40: warning: suggest parentheses around ‘+’ inside ‘>>’ [-Wparentheses]
62 | _mid=_l+_r>>1;
| ~~^~~
Main.cpp:31:32: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
31 | n=read();q=read();scanf("%s",c+1);
| ~~~~~^~~~~~~~~~
ジャッジ結果
| セット名 |
Sample |
All |
| 得点 / 配点 |
0 / 0 |
500 / 500 |
| 結果 |
|
|
| セット名 |
テストケース |
| Sample |
00_sample_00.txt |
| All |
00_sample_00.txt, 01_random_00.txt, 01_random_01.txt, 01_random_02.txt, 01_random_03.txt, 01_random_04.txt, 01_random_05.txt, 01_random_06.txt, 01_random_07.txt, 01_random_08.txt, 01_random_09.txt, 01_random_10.txt, 01_random_11.txt, 01_random_12.txt, 01_random_13.txt, 01_random_14.txt, 01_random_15.txt, 01_random_16.txt, 01_random_17.txt, 01_random_18.txt, 01_random_19.txt, 02_corner_00.txt, 02_corner_01.txt, 02_corner_02.txt, 02_corner_03.txt |
| ケース名 |
結果 |
実行時間 |
メモリ |
| 00_sample_00.txt |
AC |
1 ms |
3892 KiB |
| 01_random_00.txt |
AC |
229 ms |
5036 KiB |
| 01_random_01.txt |
AC |
197 ms |
4420 KiB |
| 01_random_02.txt |
AC |
212 ms |
4992 KiB |
| 01_random_03.txt |
AC |
202 ms |
4756 KiB |
| 01_random_04.txt |
AC |
231 ms |
4928 KiB |
| 01_random_05.txt |
AC |
211 ms |
4548 KiB |
| 01_random_06.txt |
AC |
183 ms |
4852 KiB |
| 01_random_07.txt |
AC |
114 ms |
4484 KiB |
| 01_random_08.txt |
AC |
198 ms |
4908 KiB |
| 01_random_09.txt |
AC |
208 ms |
4472 KiB |
| 01_random_10.txt |
AC |
147 ms |
4724 KiB |
| 01_random_11.txt |
AC |
164 ms |
4592 KiB |
| 01_random_12.txt |
AC |
162 ms |
4832 KiB |
| 01_random_13.txt |
AC |
179 ms |
4660 KiB |
| 01_random_14.txt |
AC |
185 ms |
4992 KiB |
| 01_random_15.txt |
AC |
146 ms |
4572 KiB |
| 01_random_16.txt |
AC |
222 ms |
4984 KiB |
| 01_random_17.txt |
AC |
170 ms |
4560 KiB |
| 01_random_18.txt |
AC |
156 ms |
4920 KiB |
| 01_random_19.txt |
AC |
28 ms |
4500 KiB |
| 02_corner_00.txt |
AC |
18 ms |
4860 KiB |
| 02_corner_01.txt |
AC |
7 ms |
3816 KiB |
| 02_corner_02.txt |
AC |
4 ms |
3824 KiB |
| 02_corner_03.txt |
AC |
4 ms |
3936 KiB |