1 #include <bits/stdc++.h> 2 using namespace std; 3 4 const int N=100101; 5 int n,pre[N],num0,num1,a[N*3],ans; 6 char c[N]; 7 int main(){ 8 scanf("%d",&n); 9 scanf("%s",c); 10 for (int i=0;i<n;i++){ 11 if (c[i]=='0'){ 12 num0++; 13 pre[i]=pre[i-1]+1; 14 if (a[pre[i]+N]==0){ 15 a[pre[i]+N]=i; 16 }else{ 17 ans=max(ans,i-a[pre[i]+N]); 18 } 19 } 20 if (c[i]=='1'){ 21 num1++; 22 pre[i]=pre[i-1]-1; 23 if (a[pre[i]+N]==0){ 24 a[pre[i]+N]=i; 25 }else{ 26 ans=max(ans,i-a[pre[i]+N]); 27 } 28 } 29 if (pre[i]==0){ 30 ans=max(ans,i+1); 31 } 32 } 33 printf("%d %d ",ans,2*min(num0,num1)); 34 }
1 #include<bits/stdc++.h> 2 3 using namespace std; 4 5 const int maxn=1e3+10; 6 const int inf=0x3f3f3f3f; 7 int mx[maxn],mi[maxn],a[maxn][maxn]; 8 int n,m,q[maxn][2]; 9 int main() { 10 int t; 11 scanf("%d", &t); 12 while (t--) { 13 scanf("%d%d", &n, &m); 14 for (int i = 1; i <= n; i++) { 15 for (int j = 1; j <= n; j++) { 16 scanf("%d", &a[i][j]); 17 } 18 } 19 int ans = 0; 20 for (int i = 1; i <= n; i++) { 21 for (int j = 1; j <= n; j++) { 22 mx[j] = 0; 23 mi[j] = inf; 24 } 25 for (int j = i; j <= n; j++) { 26 int t1 = 0, t2 = 0, l = 1, l2 = 1, l1 = 1; 27 for (int k = 1; k <= n; k++) { 28 mx[k] = max(mx[k], a[j][k]); 29 mi[k] = min(mi[k], a[j][k]); 30 while (t1 >= l1 && mx[q[t1][0]] <= mx[k]) t1--; 31 while (t2 >= l2 && mi[q[t2][1]] >= mi[k]) t2--; 32 q[++t1][0] = k; 33 q[++t2][1] = k; 34 while (k >= l && mx[q[l1][0]] - mi[q[l2][1]] > m) { 35 l++; 36 if (q[l1][0] < l) { 37 l1++; 38 } 39 if (q[l2][1] < l) { 40 l2++; 41 } 42 } 43 ans = max(ans, (k - l + 1) * (j - i + 1)); 44 } 45 } 46 } 47 printf("%d ", ans); 48 } 49 }
1 /* 2 3 4 // manacher ,后缎自动机,回文自 动机,字符串hash 5 6 //========================== 7 //manacher 求最长回文子串 8 //========================== 9 const int maxn=110010; 10 char ma[maxn*2]; 11 int mp[maxn*2]; 12 void manacher(char s[],int len) { 13 int l = 0; 14 ma[l++] = '$'; 15 ma[l++] = '#'; 16 for (int i = 0; i < len; i++) { 17 ma[l++] = s[i]; 18 ma[l++] = '#'; 19 } 20 ma[l] = 0; 21 int mx = 0, id = 0; 22 for (int i = 0; i < l; i++) { 23 mp[i] = mx > i ? min(mp[2 * id - i], mx - i) : 1; 24 while (ma[i + mp[i]] == ma[i - mp[i]]) { 25 mp[i]++; 26 } 27 if (i + mp[i] > mx) { 28 mx = i + mp[i]; 29 id = i; 30 } 31 } 32 } 33 34 char s[maxn]; 35 int main(){ 36 while (~scanf("%s",s)){ 37 int len=strlen(s); 38 manacher(s,len); 39 int ans=0; 40 for (int i=0;i<len*2+2;i++){ 41 ans=max(ans,mp[i]-1) 42 } 43 printf("%d ",ans); 44 } 45 } 46 47 //======================= 48 // AC自动机 HDU2222 49 // 求目标串中出现了几个模式串 50 //======================= 51 52 struct Trie{ 53 int next[maxn][26],fail[maxn],end[maxn]; 54 int root,l; 55 int newnode(){ 56 for (int i=0;i<26;i++){ 57 next[i]=-1; 58 } 59 end[l++]=0; 60 return l-1; 61 } 62 void init(){ 63 l=0; 64 root=newnode(); 65 } 66 void insert(char buf[]){ 67 int len=strlen(buf); 68 int now=root; 69 for (int i=0;i<len;i++){ 70 if (next[now][buf[i]-'a']==-1){ 71 next[now][buf[i]-'a']=newnode(); 72 } 73 now=next[now][buf[i]-'a']; 74 } 75 end[now]++; 76 } 77 void build(){ 78 queue<int>Q; 79 } 80 81 }; 82 83 84 */ 85 86 87 88 89 90 91 92 93 #include<bits/stdc++.h> 94 using namespace std; 95 const int N=100000; 96 struct node{ 97 int x,y; 98 bool operator<(const node &b)const { 99 if (x==b.x){ 100 return y>b.y; 101 }else{ 102 return x<b.x; 103 } 104 } 105 }a[N]; 106 int n; 107 int main(){ 108 int t; 109 scanf("%d",&t); 110 while (t--) { 111 scanf("%d", &n); 112 for (int i = 1; i <= n; i++) { 113 scanf("%d%d", &a[i].x, &a[i].y); 114 } 115 sort(a + 1, a + n + 1); 116 int ans1x = a[n / 2].x + 1; 117 int ans2x = a[n / 2 + 1].x - 1; 118 int ans1y = a[n / 2].y + 999000000; 119 int ans2y = a[n / 2 + 1].y - 999000000; 120 printf("%d %d %d %d ", ans1x, ans1y, ans2x, ans2y); 121 122 123 } 124 }
1 #include<bits/stdc++.h> 2 3 using namespace std; 4 const int N=3e5+10; 5 long long ans; 6 int t,n,a[N]; 7 int main() 8 { 9 scanf("%d",&t); 10 while (t--) 11 { 12 scanf("%d",&n); 13 for (int i=1; i<=n; i++) 14 { 15 scanf("%d",&a[i]); 16 } 17 ans=0; 18 for (int i=1; i<=n; i++) 19 { 20 int l=i,r=i; 21 long long sum=0; 22 while (l>1&&sum+a[l-1]<a[i]) 23 { 24 l--; 25 sum+=a[l]; 26 27 } 28 while (r<n&&sum+a[r+1]<a[i]) 29 { 30 r++; 31 sum+=a[r]; 32 33 } 34 ans+=r-i+1; 35 for (int j=l; j<i; j++) 36 { 37 sum-=a[j]; 38 while (r<n&&sum+a[r+1]<a[i]) 39 { 40 r++; 41 sum+=a[r]; 42 } 43 ans+=r-i+1; 44 } 45 } 46 printf("%lld ",(long long)n*(n+1)/2-ans); 47 } 48 }