标签:swa int include tis ace 但我 freopen txt col
一般
考试先看的第二题,打了分块,然后调了很长时间,(我分块竟然调了一个小时,if位置错了,对拍一直错,漏洞百出的程序,背不过的模板)
我的if写错位置竟然还有30分?????
#include<bits/stdc++.h> using namespace std; #define ll long long #define A 600000 ll n,m,t; multiset<ll>st[700]; ll col[A],belong[A]; inline void swp(ll l){ swap(col[l],col[l+1]); if(belong[l]==belong[l+1]) return; st[belong[l]].clear(); st[belong[l+1]].clear(); // printf("bl-1=%lld l=/%lld\n",(belong[l]-1)*t+1,belong[l]*t); for(ll i=(belong[l]-1)*t+1;i<=min(belong[l]*t,n);i++){ // printf("o=%lld col=%lld\n",i,col[i]); st[belong[l]].insert(col[i]); } for(ll i=belong[l]*t+1;i<=min(belong[l+1]*t,n);i++){ // printf("oo=%lld col=%lld\n",i,col[i]); st[belong[l+1]].insert(col[i]); } } inline ll sum(ll l,ll r,ll c){ ll ans=0; // printf("t=%lld l=%lld r=%lld belong=%lld %lld *t=%lld %lld\n",t,l,r,belong[l],belong[r],belong[l]*t,belong[r]*t); // printf("l=%lld b=%lld r=%lld b=%lld\n",l,belong[l]*t,(belong[r])*t+1,r); for(ll i=l;i<=min(belong[l]*t,r);i++){ // printf("u=%lld\n",i); if(col[i]==c) { ans++; // printf("111 i=%lld ans=%lld\n",i,ans); } } if(belong[l]!=belong[r]) for(ll i=belong[l]+1;i<=belong[r]-1;i++){ // printf("belong=%lld\n",i); ans+=st[i].count(c); // printf("ans=%lld\n",ans); } for(ll i=(belong[r]-1)*t+1;i<=r;i++){ // printf("i=%lld\n",i); if(col[i]==c) { ans++; // printf("333 i=%lld ans=%lld\n",i,ans); } } return ans; } int main(){ // freopen("mkd.txt","r",stdin); // freopen("wa.txt","w",stdout); scanf("%lld%lld",&n,&m); t=sqrt(n); for(ll i=1;i<=n;i++){ scanf("%lld",&col[i]),belong[i]=(i-1)/t+1; st[belong[i]].insert(col[i]); } for(ll i=1,op,l,r,c;i<=m;i++){ scanf("%lld",&op); if(op==1){ scanf("%lld%lld%lld",&l,&r,&c); printf("%lld\n",sum(l,r,c)); } else{ scanf("%lld",&c); swp(c); } } }
然后开始看第一题,不会,但我看到给出的特殊性质我尝试推了一下,发现两个性质可以让我水掉80分第一题打了很多特判,判傻了少判10分最后只拿了70分
两个性质也是比较简单的
1.当相差为1时一定为1,相差为0时输出原值
2.当全是当前这一代最大值时,当奇偶性相同时为较小值,否则为1
然后正解也比较简单但我依然没有想出来
然后开始看第三题,但第三题我连题干都没
标签:swa int include tis ace 但我 freopen txt col
原文地址:https://www.cnblogs.com/znsbc-13/p/11294391.html