這題明明是道水題,但是卻不小心打錯了。
做法大致是每次搜到乙個i,對於每個等級k,都找乙個[x,y]滿足[x~y,i]是合法的,然後用線段樹求一下區間的交集就好了。
每次多找到乙個a[i]是,左右區間本來都要向右移動的(如果已經有的話),但是我的右區間移動了,左區間卻沒有移動,而且我並沒有考慮l=0的情況,以後要注意點啊,思維一定要謹慎。
這次又忘了開long long。
#include
#include
#include
#include
#include
#define fo(i,a,b) for(i=a;i<=b;i++)
#define fod(i,a,b) for(i=a;i>=b;i--)
using
namespace
std;
typedef
long
long ll;
const
int maxn=500007;
typedef
long
long ll;
int i,j,k,n,m,a[maxn],zuo,you,ou,sz,sy;
int x[maxn],y[maxn],c[maxn],hou[maxn],l[maxn],r[maxn],tou[maxn],tt[maxn];
int yi[maxn],er[maxn],cc[maxn];
bool bz[maxn],az[maxn];
ll ans;
int t[maxn*3][2];
void change(int x,int l,int r,int y,int z,int bz)
if(y<=mid)change(x*2,l,mid,y,z,bz);
else change(x*2+1,mid+1,r,y,z,bz);
t[x][0]=min(t[x*2][0],t[x*2+1][0]);
t[x][1]=max(t[x*2][1],t[x*2+1][1]);
}int main()
fo(i,1,m)tou[i]=n+1;
fod(i,n,1)r[i]=tou[a[i]],tou[a[i]]=i;
fo(i,1,m)tt[i]=tou[i],er[i]=n+1;
fo(i,1,m)
fo(i,1,m)
fo(i,1,n)
if(cc[a[i]]>x[a[i]])
if(ou!=m)continue;
if(t[1][1]>t[1][0])continue;
ans+=(t[1][0]-t[1][1]+1);
}printf("%lld\n",ans);
}
NOIP模擬 成績單(DP)
隨便亂yy了乙個dp竟然氵了20pts。23333 結果正解也看了我好久。不愧是t3。顯然這個題最麻煩的地方在於取出中間的一段後如何決策前後兩段的取法,顯然暴力列舉。bczd 所以我們用dp i j 表示將i j這一段全部取出需要的最小代價,cost i j k l 表示取i j這一段最大值為k,最...
超級教練實時記錄模擬成績,方便教練合理分配考試名額
隨著社會的飛速發展,車成為了人們出行最常用的一www.cppcns.com種交通工具,因此拿駕照對於絕大部分的成年人來講都是剛需。另一方面,受社會環境的影響,目前的駕考制度和規則難度也越來越大,而教練作為學員駕考之路上最重要的 引路人 承擔著廣大學員的信任和期盼。很多教練深感肩上責任重大,在工作崗位...
JZOJ4804 成績調研 模擬 雙指標
顯然的,對於任意乙個確定的r r,滿足題目要求的序列左端點肯定是一段連續的區間 lr 1 r2 lr 1 r 2 而且這個區間顯然是滿足單調性的。所以可以用三個指標維護l1,l2,r l1,l 2,r。每次把r r指標右移一位時維護l1l 1和l2l 2,然後答案累加就可以了。均攤時間複雜度為o n...