9.24模拟赛

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int N=1e3+11,St=1e3,mod=1e4;
 4 int dp[N][N],sum[N][N];
 5 
 6 inline int re_ad() {
 7     char ch=getchar(); int x=0,f=1;
 8     while(ch<'0' || ch>'9') { if(ch=='-') f=-1; ch=getchar(); }
 9     while('0'<=ch && ch<='9') x=(x<<1)+(x<<3)+ch-'0',ch=getchar();
10     return x*f;
11 }
12 
13 int main()
14 {
15     int T=re_ad();
16     dp[0][0]=dp[1][0]=sum[0][0]=1;
17     for(int i=0;i<=St;++i) sum[1][i]=1;
18     for(int i=2;i<=St;++i) for(int j=0;j<=St;++j) {
19         if(j<=(i*(i-1)/2)) {
20             if(j<i) dp[i][j]=sum[i-1][j];
21             else dp[i][j]=(sum[i-1][j]-sum[i-1][j-i]+mod)%mod;
22         }
23         !j?sum[i][j]=dp[i][j]:sum[i][j]=(sum[i][j-1]+dp[i][j])%mod;
24     }
25     for(int n,m;T--;) n=re_ad(),m=re_ad(),printf("%d\n",dp[n][m]);
26 //    for(int i=1;i<=5;++i) {    for(int j=1;j<=5;++j) printf("%d ",dp[i][j]); puts(""); }
27 //    for(int i=1;i<=5;++i) { for(int j=1;j<=5;++j) printf("%d ",sum[i][j]); puts(""); }
28     return 0;
29 }

 

 

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int N=4e3+11,St=2e3,Tree_Sz=1e5+11;
 4 int n,m,a[N],t[N],dp[N],st[N];
 5 
 6 inline int re_ad() {
 7     char ch=getchar(); int x=0,f=1;
 8     while(ch<'0' || ch>'9') { if(ch=='-') f=-1; ch=getchar(); }
 9     while('0'<=ch && ch<='9') x=(x<<1)+(x<<3)+ch-'0',ch=getchar();
10     return x*f;
11 }
12 
13 inline void get_ans(int d) {
14     memset(t,0x3f,sizeof(t));
15     t[St+0]=d;
16     for(int i=d-1,lj=0;i>=1;--i) lj+=((a[i]>a[d])?1:-1),t[lj+St]=i;
17 //    printf("t %d: ",d); for(int i=St-5;i<=St+5;++i) printf("%d ",t[i]); puts("");
18     dp[d]=max(dp[d],d-t[St-0]+1);
19     for(int i=d+1,lj=0;i<=n;++i) lj+=((a[i]>=a[d])?1:-1),dp[d]=max(dp[d],i-t[St-lj]+1); //,printf("%d: %d %d\n",d,lj,dp[d]);
20 }
21 
22 namespace ST {
23     int val[Tree_Sz];
24     inline void Pushup(int d) { val[d]=max(val[d<<1],val[d<<1|1]); }
25     void build(int d,int l,int r) {
26         if(l==r) { val[d]=dp[l]; return ; }
27         int mid=(l+r)>>1;
28         build(d<<1,l,mid),build(d<<1|1,mid+1,r);
29         Pushup(d);
30     }
31     inline void Build() { build(1,1,n); }
32     int query(int d,int l,int r,int x,int y) {
33         if(x<=l && r<=y) return val[d];
34         int mid=(l+r)>>1,res=0;
35         if(x<=mid) res=max(res,query(d<<1,l,mid,x,y));
36         if(y>=mid+1) res=max(res,query(d<<1|1,mid+1,r,x,y));
37         return res;
38     }
39     inline int Query(int x,int y) { return query(1,1,n,x,y); }
40 /*
41     void print_search(int d,int l,int r) {
42         printf("%d %d %d: %d\n",d,l,r,val[d]);
43         if(l==r) return ;
44         int mid=(l+r)>>1;
45         print_search(d<<1,l,mid),print_search(d<<1|1,mid+1,r);
46     }
47     inline void Print_Test() { print_search(1,1,n); }
48 */
49 }
50 
51 int main()
52 {
53     n=re_ad();
54     for(int i=1;i<=n;++i) a[i]=re_ad();
55     for(int i=1;i<=n;++i) get_ans(i);
56 //    for(int i=1;i<=n;++i) printf("%d ",dp[i]); puts("");
57     ST::Build();
58 //    ST::Print_Test();
59     m=re_ad();
60     for(int i=1,x,y;i<=m;++i) x=re_ad(),y=re_ad(),printf("%d\n",ST::Query(x,y));
61     return 0;
62 }

 

 

 

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int N=2e5+11,M=(1<<8)+11;
 4 int T,dp[M][M];
 5 char s[11];
 6 bool zj[M][M];
 7 inline int re_ad() {
 8     char ch=getchar(); int x=0,f=1;
 9     while(ch<'0' || ch>'9') { if(ch=='-') f=-1; ch=getchar(); }
10     while('0'<=ch && ch<='9') x=(x<<1)+(x<<3)+ch-'0',ch=getchar();
11     return x*f;
12 }
13 inline void Insert(int d,int k) {
14     int d1=(d>>8),d2=(d&((1<<8)-1));
15     for(int j=0;j<(1<<8);++j) if(zj[d2][j]) dp[d1][j]+=k;
16 //    printf("Insert %d %d: %d %d: %d\n",d,k,d1,d2,dp[0][6]);
17 }
18 inline void Query(int d) {
19     int d1=(d>>8),d2=(d&((1<<8)-1)),res=0;
20     for(int i=0;i<(1<<8);++i) if(zj[i][d1]) res+=dp[i][d2];
21     printf("%d\n",res);
22 }
23 int main()
24 {
25     for(int i=0;i<(1<<8);++i) for(int j=0;j<(1<<8);++j) zj[i][i|j]=true;
26     T=re_ad();
27     for(int x;T--;) scanf("%s",s),x=re_ad(),s[0]=='c'?Query(x):Insert(x,s[0]=='a'?1:-1);
28 //    for(int i=0;i<16;++i) { for(int j=0;j<16;++j) printf("%d",zj[i][j]); puts(""); }
29     return 0;
30 }

 

posted @ 2021-09-24 23:05  上官书房  阅读(41)  评论(0)    收藏  举报